#include<bits/stdc++.h>
using namespace std;
int rudu[1000001],n,now,m,d[1000001],num;
char a,b,c;
struct Edge{
int to,from;
}edge[1000001];
queue<int> q;
int head[1000001],edge_num,ans=0,answer[1000001];
void add_edge(int from,int to){
edge_num++;
edge[edge_num].to=to;
edge[edge_num].from=head[from];
head[from]=edge_num;
}
char print(){
for(int i=1;i<=ans;i++){
cout<<(char)(answer[i]+64);
}
cout<<endl;
return '.';
}
int tp(){
int out=1,u,t=0;
ans=0;
while(!q.empty()){
q.pop();
}
for(int i=1;i<=n;i++){
if(rudu[i]==0){
q.push(i);
t++;
}
}
if(t>1) out=0;
while(!q.empty()){
u=q.front();
q.pop();
t=0;
answer[++ans]=u;
for(int i=head[u];i>0;i=edge[i].from){
rudu[edge[i].to]--;
if(rudu[edge[i].to]==0){
t++;
q.push(edge[i].to);
}
}
if(t>1) out=0;
}
for(int i=1;i<=n;i++){
if(rudu[i]>0){
out=-1;
break;
}
}
return out;
}
int main(){
memset(head,-1,sizeof(head));
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>a>>b>>c;
add_edge(a-64,c-64);
d[c-64]++;
if(now==0){
for(int j=1;j<=n;j++){
rudu[j]=d[j];
}
now=tp();
num=i;
}
}
if(now==0) cout<<"Sorted sequence cannot be determined."<<endl;
else if(now==1){
cout<<"Sorted sequence determined after "<<num;
cout<<" relations: ";
cout<<print()<<endl;
}
else cout<<"Inconsistency found after "<<num<<" relations."<<endl;
return 0;
}
WA了两个点,#9和Subtast的#1