#include
using namespace std;
const int z = 1024;
struct EDGE{
int t, next;
int w;
} edge[z*5];
int cnt, head[z];
void adedge(int f,int t,int w) {
edge[++cnt].t = t;
edge[cnt].w = w;
edge[cnt].next = head[f];
head[f] = cnt;
return;
}
int tot, ver[z*2], depth[z*2], first[z], dis[z], dp[z][z];
bool visit[z];
void dfs(int u,int deep) {
visit[u] = true;
ver[++tot] = u;
first[u] = tot;
depth[tot] = deep;
for(int i = head[u];i;i = edge[i].next)
if(!visit[edge[i].t]) {
dis[edge[i].t] = dis[u]+edge[i].w;
dfs(edge[i].t,deep+1);
ver[++tot] = u;
depth[tot] = deep;
}
return;
}
void ST(int n) {
for(int i = 1;i <= tot;++i)
dp[i][0] = i;
for(int j = 1;(1< y) swap(x,y);
int res = RMinQ_query(x,y);
return ver[res];
}
int main() {
int n, m;
scanf("%d %d",&n,&m);
for(int i = 1;i <= m;++i) {
int f, t;
scanf("%d %d",&f,&t);
adedge(f,t,1);
}
dfs(1,1);
for(int i = 1;ver[i];++i) printf("%d ",ver[i]);
return 0;
}