太弱了以至于没有思路,求优化 )
#include<bits/stdc++.h>
#define ll long long
#define F(i,j,n) for(int i=j;i<=n;i++)
#define F1(i,j,n) for(int i=j;i>=n;i--)
#define Tr(v,e) for(int v:e)
#define D double
#define ps push_back
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
const int N=1e6+10,NN=1e4+10;
ll n,m,k,x,y,u,v,w,cnt=0,ans=0,t=0,l,r,len,T;
ll mini=INT_MAX,maxi=0,p=998244353;
char s1[N],s2[N],s3[N];
ll a[N],b[N],vis[N];
void print(){
F(i,'A','A'+n-1) cout<<a[i]<<" ";
cout<<"\n";
}
void Ask(){
ll last=0;
F1(i,n-1,0){
if((a[s1[i]]+a[s2[i]]+last)%n!=a[s3[i]]) return ;
last=(a[s1[i]]+a[s2[i]]+last)/n;
}
print();
exit(0);
}
bool check(){
F1(i,n-1,0){
if(a[s1[i]]==-1||a[s2[i]]==-1||a[s3[i]]==-1) continue;
if((a[s1[i]]+a[s2[i]])%n!=a[s3[i]]&&(a[s1[i]]+a[s2[i]]+1)%n!=a[s3[i]]) return 0;
}
return 1;
}
void dfs(ll step){
if(step>n){
Ask();
return ;
}
F(i,0,n-1){
if(!vis[i]&&check()){
vis[i]=1;
a[step+'A'-1]=i;
dfs(step+1);
a[step+'A'-1]=-1;
vis[i]=0;
}
}
a[step+'A'-1]=-1;
}
int main(){
Test;
cin>>n>>s1>>s2>>s3;
dfs(1);
return 0;
}