#include #include #include using namespace std; int Tn, n, m, i, j, an, ax[100], ay[100], k, x, y, kx[100], py[100], it, u[100][100]; char a[100][100], b[100][100]; bool fl, fr, fail, fb, fk; int main (int argc, char * const argv[]) { scanf("%d", &Tn); assert(1 <= Tn && Tn <= 10); while (Tn--) { an = 0; scanf("%d %d", &n, &m); assert(1 <= n && n <= 50); assert(1 <= m && m <= 50); for(i = 1; i <= n; i++) for(j = 1; j <= m; j++) { a[i][j] = getchar(); while (a[i][j] != '.' && a[i][j] != 'E' && a[i][j] != 'L') a[i][j] = getchar(); if (a[i][j] == 'L') { ++an; ax[an] = i; ay[an] = j; } } assert(1 <= an && an <= 16); for(i = 0; i < (1 << an); i++) { ++it; fb = false; for(j = 1; j <= an; j++) if (i & (1 << (j - 1))) { x = ax[j]; y = ay[j]; fk = false; while (x > 0) { if (u[x][y] == it) { fb = true; break; } u[x][y] = it; fk |= (a[x][y] == 'E'); --x; } fb |= !fk; if (fb) break; } if (fb) continue; for(j = 1; j <= n; j++) kx[j] = 0; for(j = 1; j <= an; j++) if ((i & (1 << (j - 1))) == 0) { ++kx[ax[j]]; py[ax[j]] = ay[j]; } fail = false; for(j = 1; j <= n; j++) if (kx[j] < 2) { fl = fr = false; for(k = 1; k <= m; k++) if (a[j][k] == 'E' && u[j][k] != it && py[j] > k) fl = true; else if (a[j][k] == 'E' && u[j][k] != it) { fr = true; break; } if (kx[j] == 0 && (fl || fr)) { fail = true; break; } if (fl && fr) { fail = true; break; } } if (!fail) { puts("Possible"); break; } } if (i == (1 << an)) puts("Impossible"); } return 0; }