#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;
}
