#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,zm[30],c[5][31];
char c1;
bool f[30],F;
bool jc()
{
int p=0;
for(int i=n-1;i>=0;--i)
{
if (zm[c[1][i]]==-1||zm[c[2][i]]==-1||zm[c[3][i]]==-1)return false;
int x=zm[c[1][i]]+zm[c[2][i]]+p;
if(x%n!=zm[c[3][i]])return true;
p=x/n;
}
return false;
}
bool jc2()
{
for(int i=n-1;i>=0;--i)//a+b?c
if(zm[c[1][i]]!=-1&&zm[c[2][i]]!=-1&&zm[c[3][i]]!=-1)
{
int x=(zm[c[1][i]]+zm[c[2][i]])%n;
if(!(x%n==zm[c[3][i]]||(x+1)%n==zm[c[3][i]]))return true;
}
for(int i=n-1;i>=0;--i)//a+?=c
if(zm[c[1][i]]!=-1&&zm[c[2][i]]==-1&&zm[c[3][i]]!=-1)
{
int x=(zm[c[3][i]]-zm[c[1][i]]+n)%n;
if(f[x]&&f[(x-1)%n])return true;
}
for(int i=n-1;i>=0;--i)//?+b=c
if(zm[c[1][i]]==-1&&zm[c[2][i]]!=-1&&zm[c[3][i]]!=-1)
{
int x=(zm[c[3][i]]-zm[c[2][i]]+n)%n;
if(f[x]&&f[(x-1)%n])return true;
}
for(int i=n-1;i>=0;--i)//a+b=?
if(zm[c[1][i]]!=-1&&zm[c[2][i]]!=-1&&zm[c[3][i]]==-1)
{
int x=(zm[c[1][i]]+zm[c[2][i]])%n;
if(f[x]&&f[(x+1)%n])return true;
}
return false;
}
void work(int k,int w)
{
if(F)return;
if(jc())return;
if(jc2())return;
//if(zm[c[1][0]-65]+zm[c[2][0]-65]>n)return;
if(k==0&&w==3)
{
for(int i=0;i<n-1;++i)printf("%d ",zm[i]);
printf("%d\n",zm[n-1]);F=true;return;
}
if(zm[c[w][k]]!=-1)
{
if(w==3){w=1;--k;}else ++w;
work(k,w);
if(w==1){w=3;++k;}else --w;
}
else
{
for(int i=n-1;i>=0;--i)
if(!f[i])
{
zm[c[w][k]]=i,f[i]=true;
if(w==3){w=1;--k;}else ++w;
work(k,w);
if(w==1){w=3;++k;}else --w;
zm[c[w][k]]=-1;f[i]=false;
}
}
}
int main()
{
memset(c,0,sizeof(c));
scanf("%d",&n);
for(int i=1;i<=3;++i)
for(int j=0;j<n;++j)
{cin>>c1;c[i][j]=c1-65;}
F=false;
memset(f,0,sizeof(f));
for(int i=0;i<n;++i)zm[i]=-1;
work(n-1,1);
return 0;
}
/**************************************************************
Problem: 2251
User: admin
Language: C++
Result: Accepted
Time:64 ms
Memory:2076 kb
****************************************************************/