#include<cstdio>
#include<cstring>
const int N = 26;
int n,m;
bool d[N][N],st[N];
int check()
{
for(int i=0;i<n;i++)
if(d[i][i])
return 2;
for(int i=0;i<n;i++)
for(int j=0;j<i;j++)
if(!d[i][j]&&!d[j][i])
return 0;
return 1;
}
char get_min()
{
for(int i=0;i<n;i++)
if(!st[i])
{
bool flag=true;
for(int j=0;j<n;j++)
if(!st[j]&&d[j][i])
{
flag=false;
break;
}
if(flag)
{
st[i]=true;
return 'A'+i;
}
}
return -1;
}
int main()
{
while(scanf("%d%d",&n,&m),(n+m))
{
memset(d,0,sizeof d);
int type=0,t;
for(int i=1;i<=m;i++)
{
char str[5];scanf("%s",str);
int a=str[0]-'A',b=str[2]-'A';
if(!type)
{
d[a][b]=1;
for(int x=0;x<n;x++)
{
if(d[x][a]) d[x][b]=1;
if(d[b][x]) d[a][x]=1;
for(int y=0;y<n;y++)
if(d[x][a]&&d[b][y])
d[x][y]=1;
}
type=check();
if(type) t=i;
}
}
if(!type) puts("Sorted sequence cannot be determined.");
else if(type==2) printf("Inconsistency found after %d relations.\n",t);
else
{
memset(st,0,sizeof st);
printf("Sorted sequence determined after %d relations: ", t);
for(int i=0;i<n;i++)
printf("%c",get_min());
printf(".\n");
}
}
return 0;
}