大佬求调!QwQ
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=30;
int path[N],q[N],n;
bool flag,vis[N];
char e[3][N];
bool check(){
int t=0;
for (int i=n-1;i>=0;i--){
int a=path[e[0][i]-'A'],b=path[e[1][i]-'A'],c=path[e[2][i]-'A'];
if (a!=-1&&b!=-1&&c!=-1){
if (t==-1){
if ((a+b)%n!=c&&(a+b+1)%n!=c)return 0;
if (!i&&(a+b>=n))return 0;
}else{
if ((a+b+t)%n!=c)return 0;
if (!i&&(a+b+t>=n))return 0;
t=(a+b+t)/n;
}
}else t=-1;
}
return 1;
}
bool dfs(int u){
if (u==n)return true;
for(int i=0;i<n;i++){
if (!vis[i]){
vis[i]=1;
path[q[u]]=i;
if (check()&&dfs(u+1))return true;
vis[i]=0;
path[q[u]]=-1;
}
}
return 0;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;
for (int i=0;i<3;i++)scanf("%s",e[i]);//cin>>e[i];
for (int i=n-1,k=0;i>=0;i--){
for (int j=0;j<3;j++){
int t=e[j][i]-'A';
if (!vis[t]){
vis[t]=true;
q[k++]=t;
}
}
}
memset(vis,0,sizeof(vis));
memset(path,-1,sizeof(path));
dfs(0);
for (int i=0;i<n-1;i++)cout<<path[i]<<" ";
cout<<path[n-1];
return 0;
}