#include<bits/stdc++.h>
using namespace std;
int used[30],s[30],n;
struct letter{
char le;
int assin,no;
}a1[30],a2[30],a3[30];
bool cmp(letter p,letter q)
{
return p.le<q.le;
}
void translate()
{ memset(s,0,sizeof(s));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(a2[i].le==a1[j].le)
{
a2[i].assin=a1[j].assin;
}
}
for(int i=n;i>0;i--)
{ if(s[i]+a1[i].assin+a2[i].assin>=n)
{
s[i]+=a1[i].assin+a2[i].assin-n;
s[i-1]+=1;
}
else
s[i]+=a1[i].assin+a2[i].assin;
}
}
void assinment()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(a3[i].le==a1[j].le)
{
a3[i].assin=a1[j].assin;
}
}
}
bool compare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(a3[i].assin!=s[i])
{
return false;
}
}
return true;
}
void dfs(int dep)
{
if(dep==n+1)
{ assinment();
translate();
if(compare())
{
sort(a1+1,a1+1+n,cmp);
for(int h=1;h<=n;h++)
{
cout<<a1[h].assin<<" ";
}
}
return;
}
for(int i=0;i<n;i++)
{ if(used[i]==0)
{
a1[dep].assin=i;
used[i]=1;
dfs(dep+1);
used[i]=0;
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a1[i].le;
a1[i].no=i;
}
for(int i=1;i<=n;i++)
{
cin>>a2[i].le;
}
for(int i=1;i<=n;i++)
{
cin>>a3[i].le;
}
dfs(1);
return 0;
}