#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
int n,m,pi[26],vis[26];
struct node
{
vector<int> adj[26];
int indeg[26];
}p;
void add(node &N,int u,int v)
{
N.adj[u].push_back(v);
N.indeg[v]++;
}
int toposort(node N)
{
int count=0,i,k=0,vn=0,bj=0;
queue<int> q;
for(i=0;i<n;i++)
{
if(vis[i])
{
vn++;
if(!N.indeg[i])
q.push(i);
}
}
while(!q.empty())
{
count++;
int x=q.front();
q.pop();
pi[k++]=x;
if(!q.empty())
bj=1;
for(vector<int>::iterator it=N.adj[x].begin();it!=N.adj[x].end();it++)
if(!(--N.indeg[*it]))
q.push(*it);
}
if(vn==n)
{
if(count==n)
{
if(bj)
return -1;
else
return 1;
}
else
return 0;
}
else
{
if(count==vn)
return -1;
else
return 0;
}
}
int main()
{
int i,u,v,flag;
char s[4];
while(scanf("%d%d",&n,&m)!=EOF,n||m)
{
flag=0;
for(i=0;i<26;i++)
{
p.adj[i].clear();
p.indeg[i]=0;
}
memset(vis,0,sizeof(vis));
for(i=0;i<m;i++)
{
scanf("%s",s);
u=s[0]-'A';
v=s[2]-'A';
vis[u]=vis[v]=1;
add(p,u,v);
if(!flag)
{
int t=toposort(p);
if(t==0)
{
printf("Inconsistency found after %d relations.\n",i+1);
flag=1;
}
else if(t==-1&&i==m-1)
printf("Sorted sequence cannot be determined.\n");
else if(t==1)
{
printf("Sorted sequence determined after %d relations: ",i+1);
for(int j=0;j<n;j++)
printf(j==n-1?"%c.\n":"%c",pi[j]+'A');
flag=1;
}
}
}
}
return 0;
}
/**************************************************************
Problem: 2133
User: admin
Language: C++
Result: Accepted
Time:8 ms
Memory:1264 kb
****************************************************************/