#include <iostream>
using namespace std;
const int dx[] = {-1,-1,1,1,-2,-2,2,2};
const int dy[] = {-2,2,-2,2,-1,1,-1,1};
struct point
{
int x, y;
};
int x1, y1, x2, y2, head, tail, d[ 9 ][ 9 ], size = 0;
point p[ 9 ][ 9 ];
bool valid( int x, int y )
{
return x > 0 && x < 9 && y > 0 && y < 9 && d[ x ][ y ] == -1;
}
int main()
{
cin >> x1 >> y1 >> x2 >> y2;
point q[ 9 * 9 ],ans[ 9 * 9 ],cur,st;
q[ 0 ].x = x1;
q[ 0 ].y = y1;
head = tail = 0;
for ( int i = 0; i < 9; ++i )
for ( int j = 0; j < 9; ++j )
{
d[ i ][ j ] = -1;
p[ i ][ j ].x = p[ i ][ j ].y = -1;
}
d[ x1 ][ y1 ] = 0;
while ( head <= tail )
{
cur = st = q[ head++ ];
for ( int i = 0; i < 8; ++i )
{
cur.x = st.x + dx[i], cur.y = st.y + dy[ i ];
if ( valid( cur.x, cur.y ) )
{
q[ ++tail ] = cur;
d[ cur.x ][ cur.y ] = d[ st.x ][ st. y ] + 1;
p[ cur.x ][ cur.y ] = st;
}
}
}
cout << "Length of path is " << d[ x2 ][ y2 ] << "\n";
cout << "Path:\n";
point u;
u.x = x2;
u.y = y2;
for ( ; u.x != -1 && u.y != -1; u = p[ u .x ][ u.y ] )
ans[ ++size ] = u;
for ( int i = size; i > 0; --i )
cout << ans[ i ].x << " " << ans[ i ].y << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IGR4W10gPSB7LTEsLTEsMSwxLC0yLC0yLDIsMn07CmNvbnN0IGludCBkeVtdID0gey0yLDIsLTIsMiwtMSwxLC0xLDF9OwoKc3RydWN0IHBvaW50CnsKCWludCB4LCB5OyAKfTsKCmludCB4MSwgeTEsIHgyLCB5MiwgaGVhZCwgdGFpbCwgZFsgOSBdWyA5IF0sIHNpemUgPSAwOwpwb2ludCBwWyA5IF1bIDkgXTsKCmJvb2wgdmFsaWQoIGludCB4LCBpbnQgeSApCnsKCXJldHVybiB4ID4gMCAmJiB4IDwgOSAmJiB5ID4gMCAmJiB5IDwgOSAmJiBkWyB4IF1bIHkgXSA9PSAtMTsKfQoKaW50IG1haW4oKQp7CgljaW4gPj4geDEgPj4geTEgPj4geDIgPj4geTI7CgoJcG9pbnQgcVsgOSAqIDkgXSxhbnNbIDkgKiA5IF0sY3VyLHN0OwoJcVsgMCBdLnggPSB4MTsKCXFbIDAgXS55ID0geTE7CgloZWFkID0gdGFpbCA9IDA7CgoJZm9yICggaW50IGkgPSAwOyBpIDwgOTsgKytpICkKCQlmb3IgKCBpbnQgaiA9IDA7IGogPCA5OyArK2ogKQoJCXsKCQkJZFsgaSBdWyBqIF0gPSAtMTsKCQkJcFsgaSBdWyBqIF0ueCA9IHBbIGkgXVsgaiBdLnkgPSAtMTsKCQl9CgoJZFsgeDEgXVsgeTEgXSA9IDA7Cgl3aGlsZSAoIGhlYWQgPD0gdGFpbCApCgl7CgkJY3VyID0gc3QgPSBxWyBoZWFkKysgXTsKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCA4OyArK2kgKQoJCXsKCQkJY3VyLnggPSBzdC54ICsgZHhbaV0sIGN1ci55ID0gc3QueSArIGR5WyBpIF07CgkJCWlmICggdmFsaWQoIGN1ci54LCBjdXIueSApICkKCQkJewoJCQkJcVsgKyt0YWlsIF0gPSBjdXI7CgkJCQlkWyBjdXIueCBdWyBjdXIueSBdID0gZFsgc3QueCBdWyBzdC4geSBdICsgMTsKCQkJCXBbIGN1ci54IF1bIGN1ci55IF0gPSBzdDsKCQkJfQoJCX0KCX0KCQoJY291dCA8PCAiTGVuZ3RoIG9mIHBhdGggaXMgIiA8PCBkWyB4MiBdWyB5MiBdIDw8ICJcbiI7CgkKCWNvdXQgPDwgIlBhdGg6XG4iOwoKCXBvaW50IHU7Cgl1LnggPSB4MjsKCXUueSA9IHkyOwoKCWZvciAoIDsgdS54ICE9IC0xICYmIHUueSAhPSAtMTsgdSA9IHBbIHUgLnggXVsgdS55IF0gKSAKCQlhbnNbICsrc2l6ZSBdID0gdTsKCglmb3IgKCBpbnQgaSA9IHNpemU7IGkgPiAwOyAtLWkgKQoJCWNvdXQgPDwgYW5zWyBpIF0ueCA8PCAiICIgPDwgYW5zWyBpIF0ueSA8PCAiXG4iOwoJCglyZXR1cm4gMDsKfQo=