#include<bits/stdc++.h>
using namespace std;
struct Edge{
int to,w,nxt;
}edge[100001];
int cnt,u,v,m,n,g[1001][1001],b[100001],que[100001],head,tail;
bool vis[100001];
void dfs(int cur){
b[++cnt]=cur;
vis[cur]=1;
for(int i=1;i<=n;i++){
if(g[cur][i]&&!vis[i]){
dfs(i);
}
}
}
void bfs(int cur){
head=1;tail=2;
que[head]=cur;vis[cur]=1;
while(head<tail){
cur=que[head];
for(int i=1;i<=n;i++){
if(g[cur][i]&&!vis[i]){
que[tail++]=i;
vis[i]=1;
}
if(tail>n) break;
}
head++;
}
for(int i=1;i<tail;i++){
cout<<que[i]<<" ";
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u>>v;
g[u][v]=1;
}
for(int i=1;i<=n;i++){
if(!vis[i]) dfs(i);
}
memset(vis,0,sizeof vis);
for(int i=1;i<=n;i++) cout<<b[i]<<" ";
cout<<endl;
for(int i=1;i<=n;i++){
if(!vis[i]) bfs(i);
}
return false;
}