#include<stdio.h>
int arr[30][30];//arr[i][j],which can be get i
int top[30];
int edge[30][30];
int get[30];//q can get
char res[30];
int len,n,m;
int visit[30];
///
int print(int i,int l) {
visit[i]=1;
res[l]=i+'A';
if(l==n-1) {
return 1;
}
int k,t;
for(k=0; k<30; k++) {
if(visit[k]==0&&edge[i][k]==1) {
t=print(k,l+1);
if(t==1) {
return 1;
}
}
}
visit[i]=0;
return 0;
}
int main() {
int i,j,k,p,q,t;
char str[5];
scanf("%d%d",&n,&m);
for(i=1; i<=m; i++) {
scanf("%s",str);
j=str[0]-'A';
k=str[2]-'A';
edge[j][k]=1;
if(edge[k][j]==1) {
printf("Inconsistency found after %d relations.",i);
return 0;
}
get[j]++;
if(get[j]>=n-1) {
t=print(j,0);
if(t==1) {
printf("Sorted sequence determined after %d relations: ",i);
printf("%s.",res);
return 0;
}
}
arr[k][top[k]++]=j;
for(p=0; p<top[j]; p++) {
q=arr[j][p];
if(edge[k][q]==1) {
printf("Inconsistency found after %d relations.",i);
return 0;
}
if(edge[q][k]==0) {
arr[k][top[k]++]=q;
edge[q][k]=1;
get[q]++;
if(get[q]>=n-1) {
k=print(q,0);
if(k==1) {
printf("Sorted sequence determined after %d relations: ",i);
printf("%s.",res);
return 0;
}
}
}
}
for(t=0; t<26; t++) {
if(get[t]>=n-1) {
k=print(t,0);
if(k==1) {
printf("Sorted sequence determined after %d relations: ",i);
printf("%s.",res);
return 0;
}
}
}
for(t=0; t<=26; t++) {
for(k=t+1; k<=26; k++) {
if(edge[t][k]+edge[k][t]>2) {
printf("Inconsistency found after %d relations.",i);
return 0;
}
}
}
}
printf("Sorted sequence cannot be determined.");
return 0;
}