#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
****************************************************************/