#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int n,m;
char a[50],b[50];
char str[210][50];
int map[210][210],vis[210];
int s[210][210];
int d[210];
void qing()
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
memset(d,0,sizeof(d));
memset(s,0,sizeof(s));
memset(a,‘\0‘,sizeof(a));
memset(b,‘\0‘,sizeof(b));
memset(str,‘\0‘,sizeof(str));
}
void getmap()
{
int q,p,i,j,sum=1;
qing();
for(i=1;i<=m;i++)
{
q=p=-1;
scanf("%s%s",a,b);
for(j=1;j<sum;j++)
{
if(strcmp(str[j],a)==0)
{
q=j;
map[i][1]=j;
}
if(strcmp(str[j],b)==0)
{
p=j;
map[i][2]=j;
}
if(q!=-1&&p!=-1)
break;
}
if(q==-1)
{
q=sum++;
map[i][1]=q;
strcpy(str[q],a);
}
if(p==-1)
{
p=sum++;
map[i][2]=p;
strcpy(str[p],b);
}
}
for(i=1;i<=n;i++)
{
if(!s[map[i][1]][map[i][2]])
{
s[map[i][1]][map[i][2]]=1;
vis[map[i][2]]++;
}
}
}
void tuopu()
{
int i,j,ok=0;
int ant=0;
queue<int>q;
while(!q.empty())
q.pop();
for(i=1;i<=n;i++)
if(vis[i]==0)
q.push(i);
int u,ans=0;
while(!q.empty())
{
if(q.size()>1)//判断是否独一无二
{
ok=1;
break;
}
u=q.front();
q.pop();
d[ans++]=u;
for(i=1;i<=n;i++)
{
if(s[u][i])
{
vis[i]--;
if(!vis[i])
q.push(i);
}
}
}
if(ans!=n)//判断是否成环
ok=1;
if(ok)
printf("baga\n");
else
{
for(i=0;i<ans-1;i++)
printf("%s ",str[d[i]]);
printf("%s\n",str[d[ans-1]]);
}
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
getmap();
tuopu();
}
return 0;
}