#include #include #include #include #include using namespace std; int n,m; long long p; char xu[50][50]; bool ever[50][50]; int getint() { int res=0; char ch=getchar(); while((ch<'0' || ch>'9') && ch!='-') ch=getchar(); bool fan=0; if(ch=='-') { fan=1; ch=getchar(); } while('0'<=ch && ch<='9') { res=res*10+ch-'0'; ch=getchar(); } if(fan) res=-res; return res; } void GetData() { int i,j; m=getint(); cin>>p; for(i=1;i<=n;i++) { char ch; scanf(" %c",&ch); xu[i][1]=ch; for(j=2;j<=m;j++) xu[i][j]=getchar(); } for(i=1;i<=n;i+=2) { for(j=1;j<=m;j+=2) xu[i][j]-='0'; } } bool dfs(int x,int y,long long a,long long b) { if(a==p*b) return 1; ever[x][y]=1; int xx,yy,val; char opt; xx=x-2; yy=y; if(xx>0 && !ever[xx][yy]) { opt=xu[x-1][y]; val=xu[xx][yy]; if(opt=='+') { if(dfs(xx,yy,a+b*val,b)) { ever[x][y]=0; return 1; } } else if(opt=='-') { if(dfs(xx,yy,a-b*val,b)) { ever[x][y]=0; return 1; } } else if(opt=='*') { if(dfs(xx,yy,a*val,b)) { ever[x][y]=0; return 1; } } else if(val) { if(dfs(xx,yy,a,b*val)) { ever[x][y]=0; return 1; } } } xx=x+2; yy=y; if(xx<=n && !ever[xx][yy]) { opt=xu[x+1][y]; val=xu[xx][yy]; if(opt=='+') { if(dfs(xx,yy,a+b*val,b)) { ever[x][y]=0; return 1; } } else if(opt=='-') { if(dfs(xx,yy,a-b*val,b)) { ever[x][y]=0; return 1; } } else if(opt=='*') { if(dfs(xx,yy,a*val,b)) { ever[x][y]=0; return 1; } } else if(val) { if(dfs(xx,yy,a,b*val)) { ever[x][y]=0; return 1; } } } xx=x; yy=y-2; if(yy>0 && !ever[xx][yy]) { opt=xu[x][y-1]; val=xu[xx][yy]; if(opt=='+') { if(dfs(xx,yy,a+b*val,b)) { ever[x][y]=0; return 1; } } else if(opt=='-') { if(dfs(xx,yy,a-b*val,b)) { ever[x][y]=0; return 1; } } else if(opt=='*') { if(dfs(xx,yy,a*val,b)) { ever[x][y]=0; return 1; } } else if(val) { if(dfs(xx,yy,a,b*val)) { ever[x][y]=0; return 1; } } } xx=x; yy=y+2; if(yy<=m && !ever[xx][yy]) { opt=xu[x][y+1]; val=xu[xx][yy]; if(opt=='+') { if(dfs(xx,yy,a+b*val,b)) { ever[x][y]=0; return 1; } } else if(opt=='-') { if(dfs(xx,yy,a-b*val,b)) { ever[x][y]=0; return 1; } } else if(opt=='*') { if(dfs(xx,yy,a*val,b)) { ever[x][y]=0; return 1; } } else if(val) { if(dfs(xx,yy,a,b*val)) { ever[x][y]=0; return 1; } } } ever[x][y]=0; return 0; } void DoIt() { int i,j; for(i=1;i<=n;i+=2) { for(j=1;j<=m;j+=2) { if(dfs(i,j,xu[i][j],1)) { printf("Possible\n"); return; } } } printf("Impossible\n"); } void f() { GetData(); DoIt(); } int main() { int T=getint(); while((scanf("%d",&n))!=EOF) f(); return 0; }