#include <fstream>
#define DMAX 101
using namespace std;
ofstream fout ("dfs.out");
int C[DMAX];
int n, m, vf_start;
int A[DMAX][DMAX];
bool viz[DMAX];
void citire(), BFS(int);
int main()
{
int i;
citire();
for (i=1; i<=n; ++i)
if (!viz[i])//face parte din alta parte conexa
BFS (i);
fout.close();
return 0;
}
void citire()
{
int i, x, y;
ifstream fin ("dfs.in");
fin>>n>>m;
for (i=1; i<=m; ++i)
{
fin>>x>>y;
A[x][++A[x][0]]=y;
A[y][++A[y][0]]=x;
}
fin>>vf_start;
fin.close();
return;
}
void BFS (int vf_start)
{
int prim, ultim, p, i;
C[1]=vf_start; viz[vf_start]=true;//l-am vizitat
prim=ultim=1;
while (prim<=ultim)
{
//extrag un element din coada
p=C[prim++];
fout<<p<<" ";
//vizitez toti vecinii lui p
for (i=1; i<=A[p][0]; ++i)
if (!viz[A[p][i]])
{
viz[A[p][i]]=true;
C[++ultim]=A[p][i];
}
}
fout<<"\n";
return;
}