#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int n,m,ind[128],_ind[128];
vector<int> st,g[128];
bool push_vec(vector<int>* vec,int v)
{
for(int i:(*vec))if(i==v)return false;
vec->push_back(v);
return true;
}
bool toposort(int t)
{
vector<int> ans;
queue<int> q;
for(int v:st)
{
_ind[v]=ind[v];
if(_ind[v]==0)
{
q.push(v);
}
}
while(!q.empty())
{
bool flag=false;
int u=q.front();
for(int v:g[u])
{
if(--_ind[v]==0)
{
if(flag)return false;
else flag=true;
q.push(v);
}
}
ans.push_back(u);
q.pop();
}
if(ans.size()==n)
{
printf("Sorted sequence determined after %d relations: ",t);
for(int v:ans)cout<<(char)v;
printf(".");
return true;
}
else if(ans.size()<t)
{
printf("Inconsistency found after %d relations.",t);
return true;
}
return false;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
string s;
cin>>s;
if(s[0]==s[2])
{
printf("Inconsistency found after %d relations.",i);
return 0;
}
push_vec(&st,s[0]);
push_vec(&st,s[2]);
if(push_vec(&g[s[0]],s[2]))ind[s[2]]++;
if(toposort(i))return 0;
}
printf("Sorted sequence cannot be determined.");
return 0;
}