#include using namespace std; typedef long long int ll; typedef unsigned long long int llu; typedef pair pii; typedef vector vi; typedef vector > vii; #define rrep(i, m, n) for(int i=m; i=m; i--) #define erev(i, n) for(int i=n; i>=1; i--) #define rev(i, n) for(int i=n-1; i>=0; i--) #define EACH(v) (v).begin(), (v).end() #define CNT(a, n, x) (upper_bound(a, a+n, x)-lower_bound(a, a+n, x)) #define minup(m, x) (m=min(m, x)) #define maxup(m, x) (m=max(m, x)) #define mp make_pair #define INF 1000000000 #define MOD 1000000009 #define EPS 1E-8 #define check(i, j) (0<=(i)&&(i)> h >> w; rep(i, w) rep(j, h) cin >> m[i][j]; rep(i, w) rep(j, h) if(!visit[i][j] && dfs(i, j, i, j, m[i][j])) return 0; puts("impossible"); return 0; } int dfs(int x, int y, int px, int py, int n) { visit[x][y] = 1; rep(i, 4) if(check(x+dx[i], y+dy[i])) { int nx = x + dx[i]; int ny = y + dy[i]; if(m[nx][ny] != n) continue; if(mp(nx, ny) == mp(px, py)) continue; if(flag && visit[nx][ny]){ puts("possible"); flag = false; } if(!flag) return 1; dfs(nx, ny, x, y, n); } return 0; }