#include #include #include #include #include using namespace std; int flag; char mp[40][40]; bool vis[40][40]; int n,m; __int64 gcd(__int64 a,__int64 b) { if(b==0) return a; return gcd(b,a%b); } __int64 sum; int dir[4][2]={ 2,0, -2,0, 0,2, 0,-2 }; void dfs(int x,int y,__int64 zi,__int64 mu) { if(flag==1) return ; if(zi!=0) { __int64 yue=gcd(zi,mu); zi/=yue; mu/=yue; } if(zi==0) mu=1; if(mu==1&&zi==sum) { flag=1; return ; } for(int i=0;i<4;i++) { int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(vis[xx][yy]) continue; int xx2=x+dir[i][0]/2; int yy2=y+dir[i][1]/2; if(xx>=0&&xx=0&&yy='0') { if(flag==0) { vis[i][j]=1; dfs(i,j,mp[i][j]-'0',1); vis[i][j]=0; } } } } if(flag) puts("Possible"); else puts("Impossible"); } return 0; }