#include <iostream>
#include <vector>
const int MAX = 1001;
class Staque {
private:
int staque[MAX] = {}, top = 1, front = 1;
public:
bool empty()
{
if (top == front)
return true;
else
return false;
}
bool full()
{
if ((top + 1) % MAX == front)
return true;
else
return false;
}
void push(int a)
{
if (full()) return;
if (top == 0)
++top;
staque[(top++)%MAX] = a;
}
int pop()
{
if (empty())
return 0;
return staque[(--top)%MAX];
}
int deStq()
{
if (empty())
return 0;
return staque[(front++)%MAX];
}
};
class Graph
{
private:
std::vector<int> vertex[MAX];
public:
void linkVertex(int a, int b)
{
int left = 0, right = vertex[a].size() - 1;
while (right >= left) {
if (b > vertex[a].at((left + right) / 2))
left = (left + right) / 2 + 1;
else if (b < vertex[a].at((left + right) / 2))
right = (left + right) / 2 - 1;
else
return;
}
vertex[a].insert(vertex[a].begin() + left, b);
}
void insertEdge(int a, int b)
{
if (a == b)
return;
linkVertex(a, b);
linkVertex(b, a);
}
void DFS(int v)
{
Staque staque;
bool visited[MAX] = {};
staque.push(v);
while (!staque.empty()) {
v = staque.pop();
if(!visited[v]){
printf("%d ", v);
visited[v] = true;
}
for(int w : vertex[v])
if(!visited[w])
staque.push(w);
// w = 0;
// while (w < vertex[v].size() && visited[vertex[v].at(w)] == 1) w++;
// if (w < vertex[v].size()) {
// w = vertex[v].at(w);
// visited[w] = 1;
// printf("%d ", w);
// staque.push(w);
// v = w;
// }
// else v = staque.pop();
}
}
void BFS(int v)
{
Staque staque;
int visited[MAX] = {}, temp;
visited[v] = 1;
printf("%d ", v);
staque.push(v);
while (!staque.empty()) {
v = staque.deStq();
for (int w = 0; w < vertex[v].size(); w++) {
temp = vertex[v].at(w);
if (visited[temp] == 0) {
visited[temp] = 1;
printf("%d ", temp);
staque.push(temp);
}
}
}
}
};
int main(void)
{
Graph graph;
int n, m, v, v1, v2;
scanf("%d %d %d", &n, &m, &v);
for (int i = 0; i < m; i++) {
scanf("%d %d", &v1, &v2);
graph.insertEdge(v1, v2);
}
graph.DFS(v);
printf("\n");
graph.BFS(v);
}
/*
Input example
7 6 1
1 4
1 3
1 2
4 6
4 5
2 7
Output example
1 2 7 3 4 5 6
1 2 3 4 7 5 6
*/
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgogCmNvbnN0IGludCBNQVggPSAxMDAxOwogCmNsYXNzIFN0YXF1ZSB7CnByaXZhdGU6CglpbnQgc3RhcXVlW01BWF0gPSB7fSwgdG9wID0gMSwgZnJvbnQgPSAxOwpwdWJsaWM6Cglib29sIGVtcHR5KCkKCXsKCQlpZiAodG9wID09IGZyb250KQoJCQlyZXR1cm4gdHJ1ZTsKCQllbHNlCgkJCXJldHVybiBmYWxzZTsKCX0KCWJvb2wgZnVsbCgpCgl7CgkJaWYgKCh0b3AgKyAxKSAlIE1BWCA9PSBmcm9udCkKCQkJcmV0dXJuIHRydWU7CgkJZWxzZQoJCQlyZXR1cm4gZmFsc2U7Cgl9Cgl2b2lkIHB1c2goaW50IGEpCgl7CgkJaWYgKGZ1bGwoKSkgcmV0dXJuOwoJCWlmICh0b3AgPT0gMCkKCQkJKyt0b3A7CgkJc3RhcXVlWyh0b3ArKyklTUFYXSA9IGE7Cgl9CglpbnQgcG9wKCkKCXsKCQlpZiAoZW1wdHkoKSkKCQkJcmV0dXJuIDA7CgkJcmV0dXJuIHN0YXF1ZVsoLS10b3ApJU1BWF07Cgl9CglpbnQgZGVTdHEoKQoJewoJCWlmIChlbXB0eSgpKQoJCQlyZXR1cm4gMDsKCQlyZXR1cm4gc3RhcXVlWyhmcm9udCsrKSVNQVhdOwoJfQp9OwogCmNsYXNzIEdyYXBoCnsKcHJpdmF0ZToKCXN0ZDo6dmVjdG9yPGludD4gdmVydGV4W01BWF07CnB1YmxpYzoKCXZvaWQgbGlua1ZlcnRleChpbnQgYSwgaW50IGIpIAoJewoJCWludCBsZWZ0ID0gMCwgcmlnaHQgPSB2ZXJ0ZXhbYV0uc2l6ZSgpIC0gMTsKCQl3aGlsZSAocmlnaHQgPj0gbGVmdCkgewoJCQlpZiAoYiA+IHZlcnRleFthXS5hdCgobGVmdCArIHJpZ2h0KSAvIDIpKQoJCQkJbGVmdCA9IChsZWZ0ICsgcmlnaHQpIC8gMiArIDE7CgkJCWVsc2UgaWYgKGIgPCB2ZXJ0ZXhbYV0uYXQoKGxlZnQgKyByaWdodCkgLyAyKSkKCQkJCXJpZ2h0ID0gKGxlZnQgKyByaWdodCkgLyAyIC0gMTsKCQkJZWxzZQoJCQkJcmV0dXJuOwoJCX0KCQl2ZXJ0ZXhbYV0uaW5zZXJ0KHZlcnRleFthXS5iZWdpbigpICsgbGVmdCwgYik7Cgl9Cgl2b2lkIGluc2VydEVkZ2UoaW50IGEsIGludCBiKQoJewoJCWlmIChhID09IGIpCgkJCXJldHVybjsKCQlsaW5rVmVydGV4KGEsIGIpOwoJCWxpbmtWZXJ0ZXgoYiwgYSk7Cgl9Cgl2b2lkIERGUyhpbnQgdikKCXsKCQlTdGFxdWUgc3RhcXVlOwoJCWJvb2wgdmlzaXRlZFtNQVhdID0ge307CgkJc3RhcXVlLnB1c2godik7CgkJd2hpbGUgKCFzdGFxdWUuZW1wdHkoKSkgewoJCQl2ID0gc3RhcXVlLnBvcCgpOwoJCQkKCQkJaWYoIXZpc2l0ZWRbdl0pewoJCQkJcHJpbnRmKCIlZCAiLCB2KTsKCQkJCXZpc2l0ZWRbdl0gPSB0cnVlOwoJCQl9CgkJCWZvcihpbnQgdyA6IHZlcnRleFt2XSkKCQkJCWlmKCF2aXNpdGVkW3ddKQoJCQkJCXN0YXF1ZS5wdXNoKHcpOwoJCQkvLyB3ID0gMDsKCQkJLy8gd2hpbGUgKHcgPCB2ZXJ0ZXhbdl0uc2l6ZSgpICYmIHZpc2l0ZWRbdmVydGV4W3ZdLmF0KHcpXSA9PSAxKSB3Kys7CgkJCS8vIGlmICh3IDwgdmVydGV4W3ZdLnNpemUoKSkgewoJCQkvLyAJdyA9IHZlcnRleFt2XS5hdCh3KTsKCQkJLy8gCXZpc2l0ZWRbd10gPSAxOwoJCQkvLyAJcHJpbnRmKCIlZCAiLCB3KTsKCQkJLy8gCXN0YXF1ZS5wdXNoKHcpOwoJCQkvLyAJdiA9IHc7CgkJCS8vIH0KCQkJLy8gZWxzZSB2ID0gc3RhcXVlLnBvcCgpOwoJCQkKCQl9Cgl9Cgl2b2lkIEJGUyhpbnQgdikKCXsKCQlTdGFxdWUgc3RhcXVlOwoJCWludCB2aXNpdGVkW01BWF0gPSB7fSwgdGVtcDsKCQl2aXNpdGVkW3ZdID0gMTsKCQlwcmludGYoIiVkICIsIHYpOwoJCXN0YXF1ZS5wdXNoKHYpOwoJCXdoaWxlICghc3RhcXVlLmVtcHR5KCkpIHsKCQkJdiA9IHN0YXF1ZS5kZVN0cSgpOwoJCQlmb3IgKGludCB3ID0gMDsgdyA8IHZlcnRleFt2XS5zaXplKCk7IHcrKykgewoJCQkJdGVtcCA9IHZlcnRleFt2XS5hdCh3KTsKCQkJCWlmICh2aXNpdGVkW3RlbXBdID09IDApIHsKCQkJCQl2aXNpdGVkW3RlbXBdID0gMTsKCQkJCQlwcmludGYoIiVkICIsIHRlbXApOwoJCQkJCXN0YXF1ZS5wdXNoKHRlbXApOwoJCQkJfQoJCQl9CgkJfQoJfQp9OwogCmludCBtYWluKHZvaWQpCnsKCUdyYXBoIGdyYXBoOwoJaW50IG4sIG0sIHYsIHYxLCB2MjsKIAoJc2NhbmYoIiVkICVkICVkIiwgJm4sICZtLCAmdik7Cglmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewoJCXNjYW5mKCIlZCAlZCIsICZ2MSwgJnYyKTsKCQlncmFwaC5pbnNlcnRFZGdlKHYxLCB2Mik7Cgl9CglncmFwaC5ERlModik7CglwcmludGYoIlxuIik7CglncmFwaC5CRlModik7Cn0KLyoKSW5wdXQgZXhhbXBsZQo3IDYgMQoxIDQKMSAzCjEgMgo0IDYKNCA1CjIgNwogCk91dHB1dCBleGFtcGxlCjEgMiA3IDMgNCA1IDYKMSAyIDMgNCA3IDUgNgoqLw==