#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(x) x.begin() , x.end() #define fi first #define se second #define pb push_back #define umax( x , y ) x = max( x , (y) ) #define umin( x , y ) x = min( x , (y) ) #define For( i , a ) for(int i=1;i<=a;i++) #define ort (b+s)/2 #define y2 asrwjaelkf #define y1 asseopirwjaelkf #define set multiset using namespace std; inline int read() { int res = 0 ;int neg ; while(true){char ch = getchar();if(ch>='0' && ch<='9' || ch=='-'){if(ch=='-') neg = -1;else neg = 1 , res = ch-'0';break;} } while(true){char ch = getchar();if(ch>='0' && ch<='9') res*=10 , res+=ch-'0';else break;} return res*neg; } typedef long long Lint; typedef double db; typedef pair ii; typedef pair id; typedef pair dii; typedef pair iii; typedef pair i4; const int maxn = 201020; const int maxm = 10000020; const int MOd = 1e9 + 7; const int K = 300; struct node { int x, y; vector v; node() {} node(int _x, int _y) { x=_x; y=_y; } node(int _x, int _y, vector _v) { x=_x; y=_y; v=_v; } }; int x, y, tx, ty; int used[210][210]; int a, b; int yol[6][2] = {{-2,-1},{-2,1},{0,2},{2,1},{2,-1},{0,-2}}; int main() { //freopen("asd.in","r",stdin); //freopen("out.txt","w",stdout); scanf("%d %d %d %d %d",&a,&x,&y,&tx,&ty); node t = node( x, y ); t.v.clear(); queue q; q.push( t ); while( !q.empty() ) { x = q.front().x; y = q.front().y; vector v = q.front().v, v2; q.pop(); if( used[x][y] ) continue; used[x][y] = 1; if( x == tx && y == ty ) { printf("%d\n",v.size()); for(int i=0;i= a || x2 < 0 || y2 >= a || y2 < 0 ) continue; v2 = v; v2.pb( i ); q.push( node( x2, y2, v2 ) ); } } printf("Impossible\n"); return 0; }