#include <cstdio>
#include <cstring>
#define MAXN 517
int G[MAXN][MAXN];
int in_degree[MAXN];
int ans[MAXN];
int n, m, x, y;
int i, j;
bool toposort()
{
for (i = 1; i <= n; i++)
{
int k = 1;
while (in_degree[k] != 0&&k<=n)
k++;
if(k==n+1) return 0;
ans[i] = k;
in_degree[k] = -1;
for (int j = 1; j <= n; j++)
{
if (G[k][j])
in_degree[j]--;
}
}
return 1;
}
void init()
{
memset(in_degree, 0, sizeof(in_degree));
memset(ans, 0, sizeof(ans));
memset(G, 0, sizeof(G));
}
int main()
{
while (~scanf("%d%d", &n, &m))
{
init();
for (i = 0; i < m; i++)
{
scanf("%d%d", &x, &y);
if(G[x][y]==0) in_degree[y]++;
G[x][y] = 1;
}
toposort();
for (i = 1; i < n; i++)
printf("%d ", ans[i]);
printf("%d\n", ans[n]);
}
return 0;
}
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int maxn=500+10;
int n,m;
vector<int> G[maxn];
int in[maxn];
void topo()
{
priority_queue<int,vector<int>,greater<int> > Q;
int ans[maxn],cnt=0;
for(int i=1;i<=n;i++)if(in[i]==0) Q.push(i);
while(!Q.empty())
{
int u=Q.top(); Q.pop();
ans[cnt++]=u;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(--in[v]==0)
Q.push(v);
}
}
printf("%d",ans[0]);
for(int i=1;i<n;i++)
printf(" %d",ans[i]);
puts("");
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
memset(in,0,sizeof(in));
for(int i=1;i<=n;i++) G[i].clear();
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
in[v]++;
}
topo();
}
return 0;
}
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int maxn=500+10;
int n,m;
vector<int> G[maxn];
int in[maxn];
void topo()
{
priority_queue<int,vector<int>,greater<int> > Q;
int ans[maxn],cnt=0;
for(int i=1;i<=n;i++)if(in[i]==0) Q.push(i);
while(!Q.empty())
{
int u=Q.top(); Q.pop();
ans[cnt++]=u;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(--in[v]==0)
Q.push(v);
}
}
printf("%d",ans[0]);
for(int i=1;i<n;i++)
printf(" %d",ans[i]);
puts("");
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
memset(in,0,sizeof(in));
for(int i=1;i<=n;i++) G[i].clear();
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
in[v]++;
}
topo();
}
return 0;
}