#include #define fore(x,a,b) for(int x=a, qwe=b; x pp[N][N]; int dy[] = {-1,1,2,1,-1,-2}, dx[] = {-2,-2,0,2,2,0}; int main() { cin >> n; int A,B,C,D; cin >> A >> B >> C >> D; fore(x,0,n)fore(y,0,n)d[x][y]=INF; d[A][B]=0; queue > q; q.push({A,B}); while(!q.empty()){ pair u=q.front(); q.pop(); fore(i,0,6){ pair v = {u.first+dx[i], u.second+dy[i]}; if(v.first>=0 && v.first < n && v.second >= 0 && v.second < n && d[v.first][v.second] == INF){ d[v.first][v.second] = d[u.first][u.second] + 1; pp[v.first][v.second] = u; prev_s[v.first][v.second] = movs[i]; q.push(v); } } } if(d[C][D] == INF){ cout <<"Impossible\n"; }else{ cout << d[C][D] << "\n"; stack ans; while(d[C][D]){ ans.push(prev_s[C][D]); pair tmp = pp[C][D]; C = tmp.first; D = tmp.second; } while(!ans.empty())cout << ans.top() << " \n"[int(ans.size())==1], ans.pop(); } }