#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define MAX 20#define DNAPRO 16void ArrayCopy(int dis[][MAX],int source[][MAX],int row,int column){for(int ii=0;ii<row;ii++)for (int jj=0;jj<column;jj++)dis[ii][jj]=source[ii][jj];};int main(){int dish[MAX][MAX],d[DNAPRO],day,Cases;int dish_copy[MAX][MAX];cin>>Cases;for(int q=0;q<Cases;q++){if(q>0)cout<<endl;cin>>day;memset(d,DNAPRO,sizeof(int));memset(dish_copy,0,MAX*MAX*sizeof(int)); memset(dish,0,MAX*MAX*sizeof(int));for (int ii=0;ii<DNAPRO;ii++){cin>>d[ii];}for(int ii=0;ii<MAX;ii++)for (int jj=0;jj<MAX;jj++)cin>>dish[ii][jj];while(day--){ArrayCopy(dish_copy,dish,MAX,MAX);for(int ii=0;ii<MAX;ii++)for (int jj=0;jj<MAX;jj++){int k=dish_copy[ii][jj];if(ii<MAX-1)k+=dish_copy[ii+1][jj];if(ii>0)k+=dish_copy[ii-1][jj];if(jj<MAX-1)k+=dish_copy[ii][jj+1];if(jj>0)k+=dish_copy[ii][jj-1];dish[ii][jj]+=d[k];if(dish[ii][jj]>3)dish[ii][jj]=3;if(dish[ii][jj]<0)dish[ii][jj]=0;}}for(int ii=0;ii<MAX;ii++){for (int jj=0;jj<MAX;jj++){switch (dish[ii][jj]){case 0: cout<<'.';break;case 1: cout<<'!';break;case 2: cout<<'X';break;case 3: cout<<'#';break;default:break;}}cout<<endl;}}}