#include #include #include using namespace std; #define all(v) ((v).begin()), ((v).end()) #define sz size() #define clr(v,d) memset(v,d,sizeof(v)) #define rep(i, v) for(int i=0;i<(v).sz;++i) #define lp(i, n) for(int i=0;i<(int)(n);++i) #define lpi(i, j, n) for(int i=(j);i<(int)(n);++i) #define lpd(i, j, n) for(int i=(j);i>=(int)(n);--i) #define pb(e) push_back(e) #define mp(a, b) make_pair(a, b) #define fi first #define se second #define sci(a) scanf("%d",&a) #define scii(a, b) scanf("%d%d",&a, &b) #define pri(a) printf("%d\n",a) #define prii(a, b) printf("%d %d\n",a, b) #define DB1(a) std::cout<<#a<<"="<<(a)< q; q.push(si); q.push(sj); memset(prv, -1, sizeof(prv)); vis[si][sj] = 1; while (!q.empty()){ int i = q.front(); q.pop(); int j = q.front(); q.pop(); if (i == ti && j == tj) break; for (int k = 0; k < 6; k++){ int ni = i + dx[k], nj = j + dy[k]; if (ni < 0 || nj < 0 || ni >= n || nj >= n || vis[ni][nj]) continue; vis[ni][nj] = vis[i][j] + 1; prv[ni][nj] = k; q.push(ni), q.push(nj); } } if (vis[ti][tj] == 0) { cout <<"Impossible"; return ; } cout << vis[ti][tj] - 1 << "\n"; vector r; while (prv[ti][tj] != -1){ int k = prv[ti][tj]; r.push_back(k); ti += -dx[k]; tj += -dy[k]; } reverse(r.begin(), r.end()); for (int i = 0; i < r.size(); i++) cout << mo[r[i]] << " "; } int main(){ cin >> n; int i, j, i1, j1; cin >> i >> j >> i1 >> j1; BFS(i, j, i1, j1); }