#include<cstdio>
#include<iostream>
#include<queue>
#include<vector>
using
namespace
std;
int
T,n,m;
int
a[101][101], R[101][101], C[101][101];
int
vr[2][101][101], vc[2][101][101];
int
inresR[101][101], inresC[101][101];
vector<
int
> ri[101][101], ci[101][101];
bool
is_possible(
int
x,
int
y,
int
r,
int
c,
int
trial) {
queue<pair<
int
,
int
> > q;
for
(
int
j : ri[y][R[y][x]]) q.push({j,y});
for
(
int
i : ci[x][C[y][x]]) q.push({x,i});
vr[trial][y][R[y][x]] = r;
vc[trial][x][C[y][x]] = c;
bool
ret = 1;
while
(!q.empty()) {
int
nx = q.front().first;
int
ny = q.front().second; q.pop();
int
& stateR = vr[trial][ny][R[ny][nx]];
int
& stateC = vc[trial][nx][C[ny][nx]];
if
(stateR && stateC) {
if
((a[ny][nx] + stateR + stateC) % 2 == 0) {
ret = 0;
break
;
}
}
else
if
(stateR) {
int
afterState = 1 + (a[ny][nx] + stateR) % 2;
stateC = afterState;
for
(
int
i : ci[nx][C[ny][nx]]) q.push({nx,i});
}
else
if
(stateC) {
int
afterState = 1 + (a[ny][nx] + stateC) % 2;
stateR = afterState;
for
(
int
j : ri[ny][R[ny][nx]]) q.push({j,ny});
}
}
return
ret;
}
int
main() {
scanf
(
"%d"
, &T);
for
(
int
test = 1; test <= T; ++test) {
scanf
(
"%d%d"
, &n, &m);
for
(
int
i=1;i<=n;i++)
for
(
int
j=1;j<=m;j++) {
ri[i][j-1].clear(), ci[j][i-1].clear();
for
(
int
k=0;k<2;k++)
vr[k][i][j-1] = vc[k][j][i-1] = 0;
inresR[i][j-1] = inresC[j][i-1] = 0;
}
for
(
int
i=1;i<=n;i++)
for
(
int
j=1;j<=m;j++) {
scanf
(
"%d%d%d"
, &a[i][j], &R[i][j], &C[i][j]);
ri[i][R[i][j]].push_back(j);
ci[j][C[i][j]].push_back(i);
}
bool
flag = 1;
for
(
int
i=1;i<=n;i++) {
for
(
int
j=1;j<=m;j++) {
if
(vr[0][i][R[i][j]] || vc[0][j][C[i][j]] || vr[1][i][R[i][j]] || vc[1][j][C[i][j]])
continue
;
if
(a[i][j] == 1) {
if
(is_possible(j, i, 2, 2, 0));
else
if
(is_possible(j, i, 1, 1, 1));
else
{
flag = 0;
break
;
}
}
else
{
if
(is_possible(j, i, 2, 1, 0));
else
if
(is_possible(j, i, 1, 2, 1));
else
{
flag = 0;
break
;
}
}
}
if
(!flag)
break
;
}
printf
(
"Case #%d\n"
, test);
if
(!flag)
puts
(
"Impossible"
);
else
{
for
(
int
i=1;i<=n;i++) {
for
(
int
j=1;j<=m;j++) {
if
(vr[0][i][R[i][j]] == 1 || vr[1][i][R[i][j]] == 1)
if
(!inresR[i][R[i][j]]) {
printf
(
"R%02d%02d "
, i - 1, R[i][j]);
inresR[i][R[i][j]] = 1;
}
if
(vc[0][j][C[i][j]] == 1 || vc[1][j][C[i][j]] == 1)
if
(!inresC[j][C[i][j]]) {
printf
(
"C%02d%02d "
, j - 1, C[i][j]);
inresC[j][C[i][j]] = 1;
}
}
}
puts
(
""
);
}
}
return
0;
}