#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
vector<int> cnt[100005];
bool flag[100005];
void dfs(int nums){
cout<<nums<<" ";
flag[nums]=true;
for(int i=0;i<cnt[nums].size();i++){
if(flag[cnt[nums][i]]==0){
dfs(cnt[nums][i]);
}
}
}
void bfs(int nums){
flag[nums]=true;
queue<int> q;
q.push(nums);
cout<<nums<<" ";
while(!q.empty()){
for(int i=0;i<cnt[q.front()].size();i++){
if(flag[cnt[q.front()][i]]==0){
flag[cnt[q.front()][i]]=true;
cout<<cnt[q.front()][i]<<" ";
q.push(cnt[q.front()][i]);
}
}
q.pop();
}
}
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++){
int num1,num2;
cin>>num1>>num2;
cnt[num1].push_back(num2);
}
for(int i=1;i<n;i++){
sort(cnt[i].begin(),cnt[i].end());
}
for(int i=1;i<=n;i++)
if(!flag[i])
dfs(i);
cout<<endl;
memset(flag,false,sizeof(flag));
for(int i=1;i<=n;i++)
if(!flag[i])
bfs(i);
return 0;
}