#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int sizen=1000000;
struct ele
{
int to;
int next;
}p[sizen];
bool Map[1000][1000];
int degree[1000];
int W,E,e;
int head[sizen];
int a[sizen];
void add(int x,int y)
{
p[e].to=y;
p[e].next=head[x];
head[x]=e++;
}
void Tosort(int n)
{
int i,k;
int t=0;
for(i=1;i<=n;i++)
if(degree[i]==0)
a[t++]=i;
for(i=1;i<=n;i++)
{
for(k=head[a[i-1]];k!=-1;k=p[k].next)
{
degree[p[k].to]--;
if(degree[p[k].to]==0)
a[t++]=p[k].to;
}
}
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[n-1]);
}
int main()
{
int x,y;
int V,E;
while(scanf("%d%d",&V,&E)!=EOF)
{
e=0;
memset(a,0,sizeof(a));
memset(Map,false,sizeof(Map));
memset(degree,0,sizeof(degree));
memset(head,-1,sizeof(head));
while(E--)
{
scanf("%d%d",&x,&y);
add(x,y);
if(!Map[x][y])
{
Map[x][y]=true;
degree[y]++;
}
}
Tosort(V);
}
return 0;
}
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int sizen=1000000;
struct ele
{
int to;
int next;
}p[sizen];
bool Map[1000][1000];
int degree[1000];
int W,E,e;
int head[sizen];
int a[sizen];
void add(int x,int y)
{
p[e].to=y;
p[e].next=head[x];
head[x]=e++;
}
void Tosort(int n)
{
int i,k;
int t=0;
for(i=1;i<=n;i++)
if(degree[i]==0)
a[t++]=i;
for(i=1;i<=n;i++)
{
for(k=head[a[i-1]];k!=-1;k=p[k].next)
{
degree[p[k].to]--;
if(degree[p[k].to]==0)
a[t++]=p[k].to;
}
}
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[n-1]);
}
int main()
{
int x,y;
int V,E;
while(scanf("%d%d",&V,&E)!=EOF)
{
e=0;
memset(a,0,sizeof(a));
memset(Map,false,sizeof(Map));
memset(degree,0,sizeof(degree));
memset(head,-1,sizeof(head));
while(E--)
{
scanf("%d%d",&x,&y);
add(x,y);
if(!Map[x][y])
{
Map[x][y]=true;
degree[y]++;
}
}
Tosort(V);
}
return 0;
}