#include<bits/stdc++.h>
#define SZ 1000006
using namespace std;
vector<long>graph[SZ];
vector<long>topsort;
long color[SZ],tag;
void DFS(long p)
{
color[p]=1;
for(long i=0; i<graph[p].size(); i++)
{
if(color[graph[p][i]]==0)
{
DFS(graph[p][i]);
}
else if(color[graph[p][i]]==1)
{
tag=1;
}
}
topsort.push_back(p);
color[p]=2;
}
int main()
{
long n,m,i,a,b,c;
while(scanf("%ld%ld",&n,&m)==2)
{
if(n==0 && m==0)
{
break;
}
for(i=1; i<=m; i++)
{
scanf("%ld%ld",&a,&b);
graph[a].push_back(b);
}
tag=0;
for(i=1; i<=n; i++)
{
if(color[i]==0)
{
DFS(i);
}
}
c=topsort.size();
if(!tag)
{
for(i=c-1; i>=0; i--)
{
printf("%ld\n",topsort[i]);
}
}
else
{
printf("IMPOSSIBLE\n");
}
memset(color,0,sizeof(color));
for(i=0; i<=n; i++)
{
graph[i].clear();
}
topsort.clear();
}
return 0;
}
#define SZ 1000006
using namespace std;
vector<long>graph[SZ];
vector<long>topsort;
long color[SZ],tag;
void DFS(long p)
{
color[p]=1;
for(long i=0; i<graph[p].size(); i++)
{
if(color[graph[p][i]]==0)
{
DFS(graph[p][i]);
}
else if(color[graph[p][i]]==1)
{
tag=1;
}
}
topsort.push_back(p);
color[p]=2;
}
int main()
{
long n,m,i,a,b,c;
while(scanf("%ld%ld",&n,&m)==2)
{
if(n==0 && m==0)
{
break;
}
for(i=1; i<=m; i++)
{
scanf("%ld%ld",&a,&b);
graph[a].push_back(b);
}
tag=0;
for(i=1; i<=n; i++)
{
if(color[i]==0)
{
DFS(i);
}
}
c=topsort.size();
if(!tag)
{
for(i=c-1; i>=0; i--)
{
printf("%ld\n",topsort[i]);
}
}
else
{
printf("IMPOSSIBLE\n");
}
memset(color,0,sizeof(color));
for(i=0; i<=n; i++)
{
graph[i].clear();
}
topsort.clear();
}
return 0;
}
0 comments: (+add yours?)
Post a Comment