#include using namespace std; vector dy = {1, 0, -1, 0}; vector dx = {0, 1, 0, -1}; int main(){ int W, H; cin >> W >> H; vector> M(H, vector(W)); for (int i = 0; i < H; i++){ for (int j = 0; j < W; j++){ cin >> M[i][j]; } } vector> id(H, vector(W)); for (int i = 0; i < H; i++){ for (int j = 0; j < W; j++){ id[i][j] = i * W + j; } } vector> E(H * W); for (int i = 0; i < H; i++){ for (int j = 0; j < W; j++){ for (int k = 0; k < 4; k++){ int y = i + dy[k]; int x = j + dx[k]; if (0 <= y && y < H && 0 <= x && x < W){ if (M[i][j] == M[y][x]){ int v = id[i][j]; int w = id[y][x]; E[v].push_back(w); } } } } } vector cc(H * W, -1); int cnt = 0; for (int i = 0; i < H * W; i++){ if (cc[i] == -1){ cc[i] = cnt; queue Q; Q.push(i); while (!Q.empty()){ int v = Q.front(); Q.pop(); for (int w : E[v]){ if (cc[w] == -1){ cc[w] = cc[v]; Q.push(w); } } } cnt++; } } vector vcnt(cnt, 0); vector ecnt(cnt, 0); for (int i = 0; i < H * W; i++){ vcnt[cc[i]]++; for (int j : E[i]){ if (j > i){ ecnt[cc[i]]++; } } } bool ok = false; for (int i = 0; i < cnt; i++){ if (ecnt[i] >= vcnt[i]){ ok = true; } } if (ok){ cout << "possible" << endl; } else { cout << "impossible" << endl; } }