#include using namespace std; typedef int I; typedef double D; typedef long long int LL; typedef long double LD; typedef complex CPX; typedef pair PII; typedef pair PLL; typedef pair PDLL; typedef pair PDI; typedef vector VI; typedef vector VLL; typedef vector VD; typedef vector VLD; typedef vector VCPX; typedef vector VPII; typedef vector VPLL; typedef vector VPDLL; typedef vector VPDI; typedef pair PVI; typedef set SI; typedef set SLL; typedef set SD; typedef set SLD; typedef set SCPX; typedef set SPII; typedef set SPLL; typedef set SPDLL; typedef set SPDI; #define endl '\n' #define fr first #define sc second #define pb push_back #define eb emplace_back #define mp make_pair #define mt make_tuple #define ins insert #define ers erase #define lb lower_bound #define ub upper_bound #define fd find #define all(x) (x).begin(),(x).end() #define srt(x) sort(all(x)) #define srtn(x,N) sort((x),(x)+(N)) #define lsrt(x,L) sort(all(x),(L)) #define lsrtn(x,N,L) sort((x),(x)+(N),(L)) #define sz(v) ((int)(v).size()) #define ifor(i,st,ed) for(int i=(st);i<=(ed);++i) #define dfor(i,st,ed) for(int i=(st);i>=(ed);--i) #define efor(it,x) for(auto it:(x)) #define cout(x) cout<=n||a.fr<0)return 0; if(a.sc>=n||a.sc<0)return 0; return 1; } void bfs() { queue q;q.push(st); from[st.fr][st.sc]="*"; while(!q.empty()) { PII cn = q.front();q.pop(); ifor(i,0,5) { PII nn = {cn.fr+moves[i].fr,cn.sc+moves[i].sc}; if(onboard(nn)&&(!g[nn.fr][nn.sc])) { g[nn.fr][nn.sc] = g[cn.fr][cn.sc]+1; from[nn.fr][nn.sc] = mv[i]; pr[nn.fr][nn.sc] = cn; q.push(nn); } } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n; cin>>st.fr>>st.sc>>ed.fr>>ed.sc; from[ed.fr][ed.sc] = ""; bfs(); if(from[ed.fr][ed.sc]=="") cout << "Impossible" << endl; else { vector ans; while(ed!=st) { ans.eb(from[ed.fr][ed.sc]); ed = pr[ed.fr][ed.sc]; } reverse(all(ans)); cout << sz(ans) << endl; ifor(i,0,sz(ans)-1) cout << ans[i] << " \n"[i==sz(ans)-1]; } return 0; }