#include <iostream>
#include <set>
using namespace std;
bool isValidKnight1(int getLocX,int getLocY, int x,int y)
{
return (x == getLocX + 1 && y == getLocY + 2
|| x == getLocX - 1 && y == getLocY + 2
|| y == getLocY + 1 && x == getLocX + 2
|| y == getLocY + 1 && x == getLocX - 2
|| x == getLocX - 1 && y == getLocY + 2
|| x == getLocX + 1 && y == getLocY - 2
|| y == getLocY - 1 && x == getLocX - 2
|| y == getLocY - 1 && x == getLocX + 2
|| x == getLocX - 1 && y == getLocY - 2);
}
bool isValidKnight2(int getLocX,int getLocY, int x,int y)
{
int dx = abs(getLocX - x);
int dy = abs(getLocY - y);
return (dx == 1 && dy==2 || dx == 2 && dy==1);
}
bool isValidKnight3(int getLocX,int getLocY, int x,int y)
{
static set<pair<int,int>> valid={{1,2},{2,1}};
return (valid.find(make_pair(abs(getLocX - x), abs(getLocY - y)))!=valid.end());
}
bool isValidKnight4(int getLocX,int getLocY, int x,int y)
{
int d= abs(getLocX - x)<<4 | abs(getLocY - y);
return (d==0x21||d==0x12);
}
int main() {
int cx,cy,fx,fy;
while (cin>>cx>>cy>>fx>>fy) {
cout << cx<<","<<cy<<" -> "<<fx<<","<<fy<<": ";
cout << isValidKnight1(cx,cy,fx,fy);
cout << isValidKnight2(cx,cy,fx,fy);
cout << isValidKnight3(cx,cy,fx,fy);
cout << isValidKnight4(cx,cy,fx,fy);
cout <<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBpc1ZhbGlkS25pZ2h0MShpbnQgZ2V0TG9jWCxpbnQgZ2V0TG9jWSwgaW50IHgsaW50IHkpCnsKCXJldHVybiAoeCA9PSBnZXRMb2NYICsgMSAmJiB5ID09IGdldExvY1kgKyAyIAoJCQl8fCB4ID09IGdldExvY1ggLSAxICYmIHkgPT0gZ2V0TG9jWSArIDIgCgkJCXx8IHkgPT0gZ2V0TG9jWSArIDEgJiYgeCA9PSBnZXRMb2NYICsgMiAKCQkJfHwgeSA9PSBnZXRMb2NZICsgMSAmJiB4ID09IGdldExvY1ggLSAyICAKCQkJfHwgeCA9PSBnZXRMb2NYIC0gMSAmJiB5ID09IGdldExvY1kgKyAyIAoJCQl8fCB4ID09IGdldExvY1ggKyAxICYmIHkgPT0gZ2V0TG9jWSAtIDIgCgkJCXx8IHkgPT0gZ2V0TG9jWSAtIDEgJiYgeCA9PSBnZXRMb2NYIC0gMiAKCQkJfHwgeSA9PSBnZXRMb2NZIC0gMSAmJiB4ID09IGdldExvY1ggKyAyIAoJCQl8fCB4ID09IGdldExvY1ggLSAxICYmIHkgPT0gZ2V0TG9jWSAtIDIpOwp9CmJvb2wgaXNWYWxpZEtuaWdodDIoaW50IGdldExvY1gsaW50IGdldExvY1ksIGludCB4LGludCB5KQp7CglpbnQgZHggPSBhYnMoZ2V0TG9jWCAtIHgpOyAKCWludCBkeSA9IGFicyhnZXRMb2NZIC0geSk7IAoJcmV0dXJuIChkeCA9PSAxICYmIGR5PT0yIHx8IGR4ICA9PSAyICYmIGR5PT0xKTsgCgl9CmJvb2wgaXNWYWxpZEtuaWdodDMoaW50IGdldExvY1gsaW50IGdldExvY1ksIGludCB4LGludCB5KQp7CglzdGF0aWMgc2V0PHBhaXI8aW50LGludD4+IHZhbGlkPXt7MSwyfSx7MiwxfX07IAoJcmV0dXJuICh2YWxpZC5maW5kKG1ha2VfcGFpcihhYnMoZ2V0TG9jWCAtIHgpLCBhYnMoZ2V0TG9jWSAtIHkpKSkhPXZhbGlkLmVuZCgpKTsgCn0KYm9vbCBpc1ZhbGlkS25pZ2h0NChpbnQgZ2V0TG9jWCxpbnQgZ2V0TG9jWSwgaW50IHgsaW50IHkpCnsKCWludCBkPSBhYnMoZ2V0TG9jWCAtIHgpPDw0IHwgYWJzKGdldExvY1kgLSB5KTsgCglyZXR1cm4gKGQ9PTB4MjF8fGQ9PTB4MTIpOyAKfQoKaW50IG1haW4oKSB7CglpbnQgY3gsY3ksZngsZnk7Cgl3aGlsZSAoY2luPj5jeD4+Y3k+PmZ4Pj5meSkgewoJCWNvdXQgPDwgY3g8PCIsIjw8Y3k8PCIgLT4gIjw8Zng8PCIsIjw8Znk8PCI6ICI7CgkJY291dCA8PCBpc1ZhbGlkS25pZ2h0MShjeCxjeSxmeCxmeSk7CgkJY291dCA8PCBpc1ZhbGlkS25pZ2h0MihjeCxjeSxmeCxmeSk7CgkJY291dCA8PCBpc1ZhbGlkS25pZ2h0MyhjeCxjeSxmeCxmeSk7CgkJY291dCA8PCBpc1ZhbGlkS25pZ2h0NChjeCxjeSxmeCxmeSk7CgkJY291dCA8PGVuZGw7Cgl9CgkKCXJldHVybiAwOwp9
1,1 -> 2,3: 1111
1,1 -> 3,2: 1111
3,2 -> 1,1: 1111
2,3 -> 1,1: 1111
1,1 -> 5,1: 0000
1,1 -> 5,4: 0000
5,5 -> 5,5: 0000
5,5 -> 6,7: 1111
5,5 -> 7,6: 1111
5,5 -> 4,3: 1111
5,5 -> 3,4: 1111
5,5 -> 4,6: 0000
5,5 -> 6,4: 0000
5,5 -> 7,4: 1111
5,5 -> 4,7: 1111
5,5 -> 3,6: 1111
5,5 -> 6,3: 1111