import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
for (int l = 0; l < count; l++)
{
int day = sc.nextInt();
int[] dna = new int[16];
for (int k = 0; k < dna.length; k++)
{
dna[k] = sc.nextInt();
}
int[][] data = new int[20][20];
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 20; j++)
{
data[i][j] = sc.nextInt();
}
}
for (int d = 0; d < day; d++)
{
int matrix[][] = caculateDNA(data, dna);
change(data, matrix);
}
if (l > 0)
System.out.println();
print(data);
}
}
static void change(int[][] data, int[][] matrix)
{
for (int i = 0; i < data.length; i++)
{
for (int j = 0; j < data[i].length; j++)
{
int r = data[i][j] + matrix[i][j];
if (r < 0)
{
r = 0;
}
if (r > 3)
{
r = 3;
}
data[i][j] = r;
}
}
}
static int[][] caculateDNA(int[][] data, int[] dna)
{
int matrix[][] = new int[data.length][data[0].length];
for (int i = 0; i < data.length; i++)
{
for (int j = 0; j < data[i].length; j++)
{
matrix[i][j] = dna[caculateK(data, i, j, data.length)];
}
}
return matrix;
}
static int caculateK(int[][] data, int i, int j, int length)
{
int result = data[i][j];
if (i - 1 >= 0)
{
result += data[i - 1][j];
}
if (i + 1 < length)
{
result += data[i + 1][j];
}
if (j - 1 >= 0)
{
result += data[i][j - 1];
}
if (j + 1 < length)
{
result += data[i][j + 1];
}
return result;
}
static void print(int[][] data)
{
String[] ss = new String[]
{ ".", "!", "X", "#" };
for (int i = 0; i < data.length; i++)
{
for (int j = 0; j < data[i].length; j++)
{
System.out.print(ss[data[i][j]]);
}
System.out.println();
}
}
}