#include typedef long long ll; typedef unsigned long long ull; #define FOR(i,a,b) for(int (i)=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define RANGE(vec) (vec).begin(),(vec).end() using namespace std; class TryToSurround { public: void solve(void) { int W,H; cin>>W>>H; vector> tile(H,vector(W,0)); REP(i,H) { REP(j,W) cin>>tile[i][j]; } vector> vis(H,vector(W,false)); // 直前のマスに後戻りせずに同じ数字のマスへ移動できるなら囲える function dfs = [&](int x, int y, int prex, int prey) { vis[y][x] = true; const int dx[] = {-1,0,1,0}; const int dy[] = {0,1,0,-1}; bool ok = false; REP(d, 4) { int nx = x+dx[d]; int ny = y+dy[d]; if (prex==nx && prey==ny) continue; if (nx < 0 || W <= nx || ny < 0 || H <= ny) continue; if (tile[ny][nx]!=tile[y][x]) continue; if (vis[ny][nx]) return true; ok = ok || dfs(nx,ny,x,y); } return ok; }; REP(i, H) REP(j, W) { if (vis[i][j]) continue; if ( dfs(j,i,-1,-1) ) { cout<<"possible"<solve(); delete obj; return 0; } #endif