#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
int to,w,next;
}a[50010];
int head[1510],b[60],c[60],dis[60],x,cnt,n,m;
char ca,cb;
bool f[60][60];
void dfs(int x)
{
if(c[x])
dfs(c[x]);
cout<<char('A'+x-1);
}
void add(int u,int v)
{
a[++cnt].to=v;
a[cnt].next=head[u];
head[u]=cnt;
}
void check(int k)
{
head[5]=0;
memset(dis,0,sizeof(dis));
queue<int> q;
dis[0]=1;
q.push(0);
while(!q.empty())
{
x=q.front();
//cout<<x<<endl;
q.pop();
for(int i=head[x];i;i=a[i].next)
{
if(dis[a[i].to]<dis[x]+1)
{
c[n+1]=a[i].to;
c[a[i].to]=x;
dis[a[i].to]=dis[x]+1;
q.push(a[i].to);
}
if(dis[a[i].to]>n+2)
{
printf("Inconsistency found after %lld relations.",k);
exit(0);
}
}
//cout<<endl;
}
if(k==m&&dis[n+1]!=n+2)
cout<<"Sorted sequence cannot be determined.";
if(dis[n+1]==n+2)
{
printf("Sorted sequence determined after %lld relations: ",k);
dfs(c[n+1]);
cout<<".";
exit(0);
}
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
add(0,i);
add(i,n+1);
}
for(int i=65;i<=90;i++)
b[i]=i-64;
for(int i=1;i<=m;i++)
{
cin>>ca;
if(ca=='\r')
cin>>ca;
cin>>cb>>cb;
if(ca==cb)
{
printf("Inconsistency found after %lld relations.",k);
return 0;
}
if(!f[b[(int)ca]][b[(int)cb]])
{
f[b[(int)ca]][b[(int)cb]]=1;
add(b[(int)ca],b[(int)cb]);
}
check(i);
}
return 0;
}
可能有弱智问题,轻点喷