#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int map[7][7];
int num[7][7];
char H[6];
int ff=0;
int n=1;
void dfs(int x,int y)
{
int i,j;
if(x==6)
{
ff=1;
cout<<n++<<endl;
for(i=0;i<=5;i++)
{ for(j=0;j<=5;j++)
{
printf("%c",H[map[i][j]]);
}
printf("\n");
}
return ;
}
int div=num[x][y];
int f=0;
if(map[x][y]==-1)
for(i=0;i<=5;i++)
{
f=0;
for(j=0;j<6;j++)
if(map[j][y]==i)
{f=1;break;}
for(j=0;j<6;j++)
if(map[x][j]==i)
{f=1;break;}
for(j=0;j<=5;j++)
for(int k=0;k<=5;k++)
if(num[j][k]==div&&map[j][k]==i)
{f=1;break;}
if(f)
continue;
map[x][y]=i;
if(y<=4)
dfs(x,y+1);
else
dfs(x+1,0);
map[x][y]=-1;
}
else
{
if(y<=4)
dfs(x,y+1);
else
dfs(x+1,0);
}
return ;
}
int pre[10010],now[10010];
void init()
{
memset(map,-1,sizeof(map));
memset(num,-1,sizeof(num));
H[0]='A';
H[1]='B';
H[2]='C';
H[3]='D';
H[4]='E';
H[5]='F';
ff=0;
}
int main()
{
int i,j;
int T;
char str[7];
init();
for(i=0;i<=5;i++)
{
scanf("%s",&str);
for(j=0;j<=5;j++)
num[i][j]=str[j]-'0';
}
//cout<<"ok"<<endl;
scanf("%d",&T);
while(T--)
{
scanf("%s",&str);
map[str[0]-'0'][str[1]-'0']=str[2]-'A';
}
//cout<<"ok"<<endl;
dfs(0,0);
if(!ff)
printf("无解\n");
return 0;
}