#include<stdio.h>
#include<memory.h>
#define MAXN 30
char w[MAXN][MAXN];
int opr[MAXN][MAXN],used[MAXN];
int nums[MAXN],find = 0,n;
int ck(){
for(int i=n-1,x=0;i>=0;i--) {
int A=nums[opr[0][i]],B=nums[opr[1][i]],C=nums[opr[2][i]];
if((A+B+x)%n!=C) return 0;
x=(A+B+x)/n;
}
return 1;
}
void dfs(int i){
if ( nums[opr[0][0]] + nums[opr[1][0]] >= n ) return;
for (int j = 0 ; j < n ; j ++ ){
int x = nums[opr[0][j]],y = nums[opr[1][j]],z = nums[opr[2][j]];
if ( x == -1 || y == -1 || z == -1 ) continue;
if ( (x + y) % n != z && ( x + y + 1 ) % n != z )
return;
}
if (find == 1 ) return;
if ( i == n ){
if ( ck() == 1 ) {
for (int j = 0 ; j < n ; j ++ ) printf("%d ",nums[j]);
find = 1;
}
return;
}
for (int j = n - 1 ; j >= 0 ; j -- ){
if ( !used[j] ) {
nums[i] = j;
used[j] = 1;
dfs(i+1);
nums[i] = -1;
used[j] = 0;
}
}
}
int main(){
memset(nums,-1,sizeof(nums));
memset(opr,-1,sizeof(opr));
scanf("%d",&n);
for (int i = 0 ; i < 3 ; i ++ ) scanf("%s",w[i]);
for (int k = 0 ; k < 3 ; k ++ ){
for (int l = 0 ; l < n ; l ++ ){
opr[k][l] = w[k][l] - 'A';
}
}
dfs(0);
return 0;
}