#include<bits/stdc++.h>
#define get(a) a-'A'
using namespace std;
const int N=27;
char a[N],b[N],c[N];
int A[N],B[N],C[N];
bool use[N];
int s[N],k;
int n,vis[N],ans[N];
void make(char c)
{
int p=get(c);
if(!use[p])
{
use[p]=1;
s[k++]=p;
}
return ;
}
bool check1()
{
for(int i=n-1;i>=0;--i)
{
int x=ans[A[i]],y=ans[B[i]],z=ans[C[i]];
if(x==-1||y==-1||z==-1)continue;
if((x+y)%n!=z&&(x+y+1)%n!=z)return true;
}
return false;
}
bool check2()
{
int x=0;
for(int i=n-1;i>=0;--i)
{
int w=ans[A[i]]+ans[B[i]]+x;
if(w%n!=ans[C[i]])return false;
x=w/n;
}
if(x>0)return false;
return true;
}
void dfs(int now)
{
if(check1())
{
return;
}
if(now==n)
{
if(check2())
{
for(int i=0;i<n;++i)printf("%d ",ans[i]);
exit(0);
}
return;
}
for(int i=0;i<n;++i)
{
if(!vis[i])
{
vis[i]=1;
ans[s[now]]=i;
dfs(now+1);
vis[i]=0;
ans[s[now]]=-1;
}
}
return;
}
int main()
{
scanf("%d%s%s%s",&n,a,b,c);
for(int i=0;i<n;++i)
{
make(a[i]);
make(b[i]);
make(c[i]);
}
memset(ans,-1,sizeof ans);
for(int i=0;i<n;i++)
{
A[i]=get(a[i]);
B[i]=get(b[i]);
C[i]=get(c[i]);
}
dfs(0);
return 0;
}