rt
code:
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m;
bool vis[100005];
vector<int>a[100005];
void dfs(int k)
{
printf("%d ",k);
for(int i=0;i<a[k].size();i++)
if(!vis[a[k][i]])
{
vis[a[k][i]]=true;
dfs(a[k][i]);
}
}
void bfs()
{
queue<int>q;
memset(vis,false,sizeof(vis));
vis[1]=true;
q.push(1);
while(!q.empty())
{
int x=q.front();
q.pop();
printf("%d ",x);
for(int i=0;i<a[x].size();i++)
if(!vis[a[x][i]])
{
vis[a[x][i]]=true;
q.push(a[x][i]);
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
a[u].push_back(v);
}
for(int i=1;i<=n;i++)
sort(a[i].begin(),a[i].end());
dfs(1);
puts("");
bfs();
return 0;
}