#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef _MSC_VER #include #endif #define FOR(i, a, b) for(int i = (a); i < (int)(b); ++i) #define rep(i, n) FOR(i, 0, n) #define ALL(v) v.begin(), v.end() #define REV(v) v.rbegin(), v.rend() #define MEMSET(v, s) memset(v, s, sizeof(v)) #define UNIQUE(v) (v).erase(unique(ALL(v)), (v).end()) #define MP make_pair #define MT make_tuple using namespace std; typedef long long ll; typedef pair P; const int N = 110; int m[N][N]; int vis[N][N]; int dx[] = { -1, 0, 1, 0 }; int dy[] = { 0, -1, 0, 1 }; int w, h; int dfs(int r, int c, int d){ vis[r][c] = 1; for (int i = 0; i < 4; ++i){ if (i == d) continue; int nr = r + dx[i], nc = c + dy[i]; if (nr < 0 || nr >= h || nc < 0 || nc >= w) continue; if (m[nr][nc] != m[r][c]) continue; if (vis[nr][nc]) return true; else if(dfs(nr, nc, (i + 2) % 4)) return true; } return false; } int main(){ cin.tie(0); ios::sync_with_stdio(false); cin >> w >> h; rep(i, h) rep(j, w) cin >> m[i][j]; rep(i, h) rep(j, w){ if (!vis[i][j] && dfs(i, j, -1)){ cout << "possible" << endl; return 0; } } cout << "impossible" << endl; return 0; }