#include<iostream>
#include<cstring>
#include <cstdio>
#include <stdlib.h>
using namespace std;
int n;
char s[4][30];
bool used[30];
int f[30];
int id(char x)
{
return x-'A'+1;
}
void dfs(int x,int y,int z)
{
if(x==0)
{
if(z==0)
{
for(int i=1;i<n;i++)
{
cout<<f[i]<<' ';
}
cout<<f[n];
exit(0);
}
return ;
}
if(f[id(s[y][x])]==-1)
{
for(int i=n-1;i>=0;i--)
{
if(!used[i])
{
if(y!=3)
{
f[id(s[y][x])]=i;
used[i]=true;
dfs(x,y+1,z);
f[id(s[y][x])]=-1;
used[i]=false;
}
else
{
int w=f[id(s[1][x])]+f[id(s[2][x])]+z;
if(w%n!=i)
continue;
used[i]=1;f[id(s[3][x])]=i;
dfs(x-1,1,w/n) ;
used[i]=0;
f[id(s[3][x])]=-1;
}
}
}
}
else
{
if(y!=3)
{
dfs(x,y+1,z);
}
else
{
int w=f[id(s[1][x])]+f[id(s[2][x])]+z;
if(f[id(s[3][x])]!=w%n)
return ;
dfs(x-1,1,w/n);
}
}
}
int main()
{
cin>>n;
// cout<<id('A');
cin>>s[1]+1;
cin>>s[2]+1;
cin>>s[3]+1;
memset(f,-1,sizeof(f));
dfs(n,1,0);
return 0;
}
#include<cstring>
#include <cstdio>
#include <stdlib.h>
using namespace std;
int n;
char s[4][30];
bool used[30];
int f[30];
int id(char x)
{
return x-'A'+1;
}
void dfs(int x,int y,int z)
{
if(x==0)
{
if(z==0)
{
for(int i=1;i<n;i++)
{
cout<<f[i]<<' ';
}
cout<<f[n];
exit(0);
}
return ;
}
if(f[id(s[y][x])]==-1)
{
for(int i=n-1;i>=0;i--)
{
if(!used[i])
{
if(y!=3)
{
f[id(s[y][x])]=i;
used[i]=true;
dfs(x,y+1,z);
f[id(s[y][x])]=-1;
used[i]=false;
}
else
{
int w=f[id(s[1][x])]+f[id(s[2][x])]+z;
if(w%n!=i)
continue;
used[i]=1;f[id(s[3][x])]=i;
dfs(x-1,1,w/n) ;
used[i]=0;
f[id(s[3][x])]=-1;
}
}
}
}
else
{
if(y!=3)
{
dfs(x,y+1,z);
}
else
{
int w=f[id(s[1][x])]+f[id(s[2][x])]+z;
if(f[id(s[3][x])]!=w%n)
return ;
dfs(x-1,1,w/n);
}
}
}
int main()
{
cin>>n;
// cout<<id('A');
cin>>s[1]+1;
cin>>s[2]+1;
cin>>s[3]+1;
memset(f,-1,sizeof(f));
dfs(n,1,0);
return 0;
}