#include <bits/stdc++.h>
using namespace std;
char c[6][30];
int a[128], n;
bool ok, use[200];
inline void dfs (int s, int mod) // s means right to left, mod means add 1
{
if (s == 0)
{
if (mod > 0) return;
for (int i = 'A'; i < 'A' + n; i ++)
cout << a[i] << ' ';
cout << endl;
ok = 1;
exit(0);
} //find answers
if (a[c[1][s]] == - 1 && a[c[2][s]] == - 1 && a[c[3][s]] == - 1)
{
for (int i = 0; i < n; i ++)
if (!use[i]) //not used
{
a[c[1][s]] = i; use[i] = 1;
if (a[c[2][s]] == - 1)
{
for (int j = 0; j < n; j ++)
if (!use[j])
{
a[c[2][s]] = j; use[j] = 1;
if (a[c[3][s]] == - 1)
if (!use[(i + j + mod) % n])
a[c[3][s]] = (i + j + mod) % n, use[(i + j + mod) % n] = 1;
if (a[c[3][s]] != - 1 && (a[c[1][s]] + a[c[2][s]] + mod) % n == a[c[3][s]])
dfs (s - 1, (i + j + mod >= n ? 1 : 0));
a[c[2][s]] = - 1; use[j] = 0;
if (a[c[3][s]] != - 1)
use[a[c[3][s]]] = 0, a[c[3][s]] = - 1;
if (ok) return;
}
}
else
{
if (a[c[3][s]] == - 1 && !use[(i + a[c[2][s]] + mod) % n])
a[c[3][s]] = (i + a[c[2][s]] + mod) % n, use[(i + a[c[2][s]] + mod) % n] = 1;
if (a[c[3][s]] != - 1 && (a[c[1][s]] + a[c[2][s]] + mod) % n == a[c[3][s]])
dfs (s - 1, (i + a[c[2][s]] + mod >= n ? 1 : 0));
if (a[c[3][s]] != - 1)
use[a[c[3][s]]] = 0, a[c[3][s]] = - 1;
if (ok) return;
} // may c[1][s] == c[2][s]
a[c[1][s]] = - 1; use[i] = 0;
if (ok) return;
}
return;
} //first situation : three letter aren't used
if (a[c[1][s]] == - 1 && a[c[2][s]] == - 1)
{
for (int i = 0; i < n; i ++)
if (!use[i])
{
a[c[1][s]] = i; use[i] = 1;
if (a[c[2][s]] == - 1 && !use[(a[c[3][s]] - i - mod + n) % n])
a[c[2][s]] = (a[c[3][s]] - i - mod + n) % n, use[(a[c[3][s]] - i - mod + n) % n] = 1;
if (a[c[2][s]] != - 1 && (a[c[1][s]] + a[c[2][s]] + mod) % n == a[c[3][s]])
dfs (s - 1, (i + a[c[2][s]] + mod >= n ? 1 : 0)); //don't forget add mod!
a[c[1][s]] = - 1, use[i] = 0;
if (a[c[2][s]] != - 1)
use[a[c[2][s]]] = 0, a[c[2][s]] = - 1;
if (ok) return;
}
return;
} //second situation : the third letter is used
if (a[c[1][s]] == - 1 && a[c[3][s]] == - 1)
{
for (int i = 0; i < n; i ++)
if (!use[i])
{
a[c[1][s]] = i; use[i] = 1;
if (a[c[3][s]] == - 1 && !use[(i + a[c[2][s]] + mod) % n])
a[c[3][s]] = (i + a[c[2][s]] + mod) % n, use[(i + a[c[2][s]] + mod) % n] = 1;
if (a[c[3][s]] != - 1 && (a[c[1][s]] + a[c[2][s]] + mod) % n == a[c[3][s]])
dfs (s - 1, (i + a[c[2][s]] + mod >= n ? 1 : 0)); // add mod!
a[c[1][s]] = - 1, use[i] = 0;
if (a[c[3][s]] != - 1)
use[a[c[3][s]]] = 0, a[c[3][s]] = - 1;
if (ok) return;
}
return;
} // third situation : the second letter is used
if (a[c[2][s]] == - 1 && a[c[3][s]] == - 1)
{
for (int i = 0; i < n; i ++)
if (!use[i])
{
a[c[2][s]] = i; use[i] = 1;
if (a[c[3][s]] == - 1 && !use[(i + a[c[1][s]] + mod) % n])
a[c[3][s]] = (i + a[c[1][s]] + mod) % n, use[(i + a[c[1][s]] + mod) % n] = 1;
if (a[c[3][s]] != - 1 && (a[c[1][s]] + a[c[2][s]] + mod) % n == a[c[3][s]])
dfs (s - 1, (i + a[c[1][s]] + mod >= n ? 1 : 0)); //add mod!
a[c[2][s]] = - 1, use[i] = 0;
if (a[c[3][s]] != - 1)
use[a[c[3][s]]] = 0, a[c[3][s]] = - 1;
if (ok) return;
}
return;
} // forth situation : the third letter is used
if (a[c[1][s]] == - 1)
{
int now = (a[c[3][s]] - a[c[2][s]] - mod + n) % n;
if (!use[now])
{
a[c[1][s]] = now;
use[now] = 1;
dfs (s - 1, (a[c[1][s]] + a[c[2][s]] + mod >= n ? 1 : 0)); // add mod!
use[now] = 0;
a[c[1][s]] = - 1;
}
return;
} // fifth situation : only first letter isn't used
if (a[c[2][s]] == - 1)
{
int now = (a[c[3][s]] - a[c[1][s]] - mod + n) % n;
if (!use[now])
{
a[c[2][s]] = now;
use[now] = 1;
dfs (s - 1, (a[c[1][s]] + a[c[2][s]] + mod >= n ? 1 : 0)); // add mod!
use[now] = 0;
a[c[2][s]] = - 1;
}
return;
} // sixth situation : only second letter isn't used
if (a[c[3][s]] == - 1)
{
int now = (a[c[1][s]] + a[c[2][s]] + mod) % n;
if (!use[now])
{
a[c[3][s]] = now;
use[now] = 1;
dfs (s - 1, (a[c[1][s]] + a[c[2][s]] + mod >= n ? 1 : 0)); // add mod!
use[now] = 0;
a[c[3][s]] = - 1;
}
return;
} // seventh situaion : only third letter isn't used
if ((a[c[1][s]] + a[c[2][s]] + mod) % n == a[c[3][s]])
dfs (s - 1, (a[c[1][s]] + a[c[2][s]] + mod >= n ? 1 : 0)); // add mod!
// eighth situation and it's the last situation : all letters in this group are used
return;
}
int main()
{
cin >> n;
memset (a, - 1, sizeof (a));
for (int i = 1; i <= 3; i ++)
for (int j = 1; j <= n; j ++)
cin >> c[i][j];
dfs (n, 0);
exit(0);
}
大佬求调!