#include<iostream>
#include<vector>
using namespace std;
#define N 1010
vector<int>H[N];
struct Edge
{
int to;
int next;
}E[N];
int Head[N];
int vis[N];
void BFS()
{
int Stack[N];
int bottom = 1;
int top = 1;
Stack[++top] = 1;
while (top>=bottom)
{
int x = Stack[++bottom];
vis[x] = 1;
printf("%d ",x);
for (int i = Head[x]; i; i = E[i].next)
{
if(!vis[E[i].to])
Stack[++top] = E[i].to;
}
}
}
void DFS(int x)
{
printf("%d ",x);
vis[x] = 1;
for (int i = Head[x]; i; i = E[i].next)
{
if(!vis[i]) DFS(E[i].to);
}
}
int cnt;
void ADDEdge(int from,int to)
{
cnt++;
E[cnt].next = Head[from];
E[cnt].to = to;
Head[from] = cnt;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int x,y;
for(int i = 1;i <= m;i++)
{
scanf("%d%d",&x,&y);
H[x].push_back(y);
}
for (int i = 1; i <= n; i++)
{
sort(H[i].begin(),H[i].end());
for(int j = 0;j < H[i].size();j++)
ADDEdge(i,H[i][j]);
}
DFS(1);
BFS();
return 0;
}