#include<stdio.h> #include<string.h> #include<stdlib.h> int c[26],ar[26]; int map[26][26]; int n,m,mark; void search(int i,int max,int count,int arr[]) { int j; if(count==n&&mark==0) { for(j=0;j<=max;j++) ar[j]=arr[j]; mark=1; } else { for(j=0;j<=max;j++) if(map[i][j]==1) { arr[count]=j; search(j,max,count+1,arr); } } } int main() { int t,e,a,b,k,i,j,s,max,tag,loc; int arr[26]; char ord[4]; char al[26]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; while(scanf("%d%d",&n,&m)!=EOF&&m!=0&&n!=0) { for(i=0;i<26;i++) memset(map[i],0,26*sizeof(int)); memset(c,0,26*sizeof(int)); memset(arr,0,26*sizeof(int)); memset(ar,0,26*sizeof(int)); for(mark=tag=max=i=0;i<m;i++) { scanf("%s",&ord); a=ord[0]-'A';b=ord[2]-'A'; map[a][b]=1; c[b]=1; if(tag==0&&map[b][a]==1) { loc=i+1; tag=1; } if(b>max) max=b; if(a>max) max=a; if(tag==0) { for(k=j=0;j<=max;j++) if(c[j]==0) k++; if(k==0) { loc=i+1; tag=1; } } if(max==n-1&&tag==0) { for(j=0;j<=max;j++) if(c[j]==0) break; arr[0]=j; search(j,max,1,arr); if(mark==1) { loc=i+1; tag=2; } } } if(tag==0) printf("Sorted sequence cannot be determined.\n"); else if(tag==1) printf("Inconsistency found after %d relations.\n",loc); else { printf("Sorted sequence determined after %d relations: ",loc); for(k=0;k<=max;k++) printf("%c",al[ar[k]]); printf(".\n"); } } return 0; } /************************************************************** Problem: 2133 User: admin Language: C Result: Accepted Time:9 ms Memory:1148 kb ****************************************************************/