#include<bits/stdc++.h>
using namespace std;
int n,c[11];
string a[11][11];
map<char,int>mp;
int main(){
cin>>n;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j];
for(int i=2;i<=n;i++) c[i]=i-2;
while((double)clock()/CLOCKS_PER_SEC<=0.99){
random_shuffle(c+2,c+1+n);
for(int i=2;i<=n;i++) mp[a[i][1][0]]=c[i];
for(int i=2;i<=n;i++){
for(int j=2;j<=n;j++){
int cnt=1;
for(int k=0;k<a[i][j].size();k++) cnt*=mp[a[i][j][k]];
if((mp[a[i][1][0]]+mp[a[1][j][0]])%(n-1)!=cnt%(n-1)) goto T1;
}
}
for(int i=2;i<=n;i++) cout<<a[i][1]<<"="<<c[i]<<" ";
cout<<endl<<n-1;
return 0;
T1:;
}
cout<<"ERROR!";
}
第二个数据错了:
4
+ M N P
M N MP M
N MP MN N
P M N P
输出:
M=2 N=1 P=0
3