#include using namespace std; #define ft first #define sd second #define mk make_pair void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { pair > vis[n][n]; pair p; int i,j,k; for(i=0;i > q; q.push(mk(i_start,j_start)); while(!q.empty()) { p=q.front(); q.pop(); if(p.ft==i_end && p.sd==j_end) { break; } for(i=0;i<6;i++) { if(p.ft+x[i]>-1 && p.ft+x[i]-1 && vis[p.ft+x[i]][p.sd+y[i]].sd==mk(-1,-1)) { q.push(mk(p.ft+x[i],p.sd+y[i])); vis[p.ft+x[i]][p.sd+y[i]]=mk(s[i],mk(p.ft,p.sd)); } } } if(q.empty()) { cout<<"Impossible"; } else{ stack st; while(vis[p.ft][p.sd].ft!="a") { st.push(vis[p.ft][p.sd].ft); p=vis[p.ft][p.sd].sd; } cout<> n; int i_start; int j_start; int i_end; int j_end; cin >> i_start >> j_start >> i_end >> j_end; printShortestPath(n, i_start, j_start, i_end, j_end); return 0; }