#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
vector<int>G[50];
int in[50];
int tmp[50]; // 入度备份数组
char out[50];
int topsort(int n) {
bool zeroflag; //有多个入度为0的,即不确定拓扑排序序列
priority_queue <int,vector<int>,greater<int> > pq;
for(int i=0;i<n;i++) {
tmp[i] = in[i];
}
for(int i=0;i<n;i++) { // 将入度为0的加入优先队列
if(!tmp[i]) {
pq.push(i);
}
}
int sum=0; // 入度为0的元素
while(!pq.empty()) {
if(pq.size()>1) zeroflag = 1;
int t = pq.top();
pq.pop();
out[sum] = t+'A';
sum++;
for(vector<int>::iterator it=G[t].begin();it!=G[t].end();it++) {
tmp[*it]--;
if(tmp[*it]==0) pq.push(*it);
}
}
if(sum!=n) return 1; //说明有环
if(zeroflag) return 0; // 说明有多个入度为0 不确定
return -1; // 说明成功 记录此时到第几条
}
int main() {
freopen("1.txt","r",stdin);
int n,m;
while(true) {
bool circleflag=0,find=0;
int step;
scanf("%d %d",&n,&m);
if(n==0&&m==0) break;
memset(in,0,sizeof(in));
for(int i=1;i<=m;i++) {
char s[4];
scanf("%s",s);
if(circleflag==0) {
G[s[0]-'A'].push_back(s[2]-'A'); //s[0]的后继是s[2]
in[s[2]-'A'] += 1;
int k = topsort(n);
if(k==1) {
circleflag = 1; // 说明有环
printf("Inconsistency found after %d relations.\n",i);
continue;
}
if(k==-1) {
find = 1;
step = i;
}
}
}
if(circleflag==0&&find) {
printf("Sorted sequence determined after %d relations: ",step);
for(int i=0;i<n;i++) {
printf("%c",out[i]);
}
printf("\n");
}
if(!circleflag&&!find){
printf("Sorted sequence cannot be determined.\n");
}
}
}