#include <bits/stdc++.h>
using namespace std;
#define ll long long
template <typename T> inline void read(T &x) {
x = 0; int f = 1; char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -1;
for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
x *= f;
}
const ll N = 30;
ll n, a[N], b[N], c[N], val[N], cnt, num[N];
bool vis[N], flag;
string s1, s2, s3;
void getval(ll x) {
if (!vis[x]) {
vis[x] = 1;
num[cnt++] = x;
}
}
bool check() {
if (val[a[0]] + val[b[0]] >= n) return 1;
for (int i = n - 1; i >= 0; --i) {
ll fir = val[a[i]], sec = val[b[i]], thi = val[c[i]];
if (fir == -1 || sec == -1 || thi == -1)
continue;
if ((fir + sec) % n != thi && (fir + sec + 1) % n != thi)
return 1;
}
return 0;
}
bool verify() {
ll rec = 0;
for (int i = n - 1; i >= 0; --i) {
ll fir = val[a[i]], sec = val[b[i]], thi = val[c[i]];
if ((fir + sec + rec) % n != thi) return 1;
rec = (fir + sec + rec) % n;
}
return 0;
}
void dfs(ll loc) {
if (check() || flag) return ;
if (loc == n) {
if (verify()) {
for (int i = 0; i < n; ++i)
printf("%lld ", val[i]);
flag = 1;
}
return ;
}
for (int i = n - 1; i >= 0; --i) {
if (!vis[i]) {
val[num[loc]] = i;
vis[i] = 1;
dfs(loc + 1);
val[num[loc]] = -1;
vis[i] = 0;
}
}
}
int main() {
read(n);
cin >> s1 >> s2 >> s3;
for (int i = 0; i < n; ++i) {
a[i] = s1[i] - 'A';
b[i] = s2[i] - 'A';
c[i] = s3[i] - 'A';
}
for (int i = n - 1; i >= 0; --i) {
getval(a[i]);
getval(b[i]);
getval(c[i]);
}
fill(vis, vis + n, 0);
fill(val, val + n, -1);
dfs(0);
}
我的verity函数验证时,进位我写的(a + b + rec)% n而实际应该是 (a + b + rec) / n,之后我发现没有输出就将return的1和0的位置交换了一下就对了,但这样意思就变成了不满足条件就输出,显然不对,但这样子提交这个题就过了,为什么