http://acm.pku.edu.cn/JudgeOnline/problem?id=1094

Код:
#include<stdio.h>

#include<string.h>
int n,m;
int g[30][30];
int use[30];
int num;
void floyd()
{
	for(int k=0;k<n;k++)	
for(int j=0;j<n;j++)
	for(int i=0;i<n;i++)
if(g[j][k]&&g[k][i])
	g[j][i]=1;
}
int con()
{
	for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
	if(g[i][j]&&g[j][i])
{
	printf("Inconsistency found after %d relations.\n",num);
	return 1;
}
return 0;
}
int isok()
{
	int flag[30][30];
	int t=0,i,j;
	memcpy(flag,g,sizeof(g));
	memset(use,0,sizeof(use));
	while(++t<=n)
	{
int count=0;
int temp;
for(i=0;i<n;i++)
if(use[i]==0)
{
	int flag1=1;
	for(j=0;j<n;j++)
flag1*=!flag[j][i];
	if(flag1)
	{
count++;
temp=i;
	}
}
if(count>1)
return 0;
for(int i=0;i<n;i++)
	flag[temp][i]=0;
use[temp]=t;
	}
	printf("Sorted sequence determined after %d relations: ",num);
	for(int i=1;i<=n;i++)
for(int j=0;j<n;j++)
	if(use[j]==i)
printf("%c",j+'A');
	printf(".\n");
	return 1;
}
void init()
{
	int d=0;
	char a,b,c;
	memset(g,0,sizeof(g));
	for(int i=1;i<=m;i++)
{
	num=i;
	scanf("%c%c%c",&a,&b,&c);
	getchar();
	g[a-'A'][c-'A']=1;
	if(d)
	continue;
	floyd();
	if(con())
	d=1;
	if(d==0)
	if(isok())
	d=1;
}
	if(d==0)
	printf("Sorted sequence cannot be determined.\n");
}
int main()
{
	while(scanf("%d%d",&n,&m)&&n)
	{
getchar();
init();
	}
	return 0;
}