#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define FOR2(i,a,b) for (int i = (a); i > (b); ++i) #define DEBUG(x) cout << '>' << #x << ':' << x << endl; inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; } const int INF = 1<<29; typedef long long ll; ////////////////////////////////////////////////////////////////////////////// const int MAX = 27; int R, C, K; int input[MAX][MAX]; bool have[10][10]; char constr[MAX][MAX]; char output[MAX][MAX]; int result; void go(int r, int c) { /*FOR(i, 0, R) { FOR(j,0,C) if (constr[i][j]) cout << constr[i][j]; else cout << " "; cout << endl; } cout << endl;*/ if (c == C) { c = 0; ++r; } if (r == R) { ++result; if (result == 1) { FOR(i, 0, R) FOR(j, 0, C) output[i][j] = constr[i][j]; } return; } if (input[r][c] == -1 || constr[r][c]) { go(r, c+1); return; } //horizontalne if (c+1 < C && input[r][c+1] != -1 && !constr[r][c+1]) { int a = input[r][c], b = input[r][c+1]; if (have[a][b]) { have[a][b] = have[b][a] = false; constr[r][c] = '['; constr[r][c+1] = ']'; go(r, c+2); constr[r][c] = constr[r][c+1] = 0; have[a][b] = have[b][a] = true; } } //vertikalne if (r+1 < R && input[r+1][c] != -1 && !constr[r+1][c]) { int a = input[r][c], b = input[r+1][c]; if (have[a][b]) { have[a][b] = have[b][a] = false; constr[r][c] = 'n'; constr[r+1][c] = 'u'; go(r, c+1); constr[r][c] = constr[r+1][c] = 0; have[a][b] = have[b][a] = true; } } } int main() { while (1) { scanf("%d%d%d", &R, &C, &K); if (!R && !C && !K) break; memset(have, 0, sizeof(have)); memset(constr, 0, sizeof(constr)); FOR(i, 0, K) { int a, b; scanf("%d%d ", &a, &b); have[a][b] = have[b][a] = true; } FOR(i, 0, R) { FOR(j, 0, C) { char c; scanf("%c ", &c); if (c == 'X') { input[i][j] = -1; constr[i][j] = 'X'; } else input[i][j] = c-'0'; } } result = 0; go(0, 0); if (result == 0) { printf("impossible\n\n"); } else { FOR(i, 0, R) { output[i][C] = 0; printf("%s\n", output[i]); } printf("%d\n\n", result-1); } } return 0; }