#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;
int visited[MAX] = {}, w;
visited[v] = 1;
printf("%d ", v);
staque.push(v);
while (!staque.empty()) {
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
*/
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY29uc3QgaW50IE1BWCA9IDEwMDE7CgpjbGFzcyBTdGFxdWUgewpwcml2YXRlOgoJaW50IHN0YXF1ZVtNQVhdID0ge30sIHRvcCA9IDEsIGZyb250ID0gMTsKcHVibGljOgoJYm9vbCBlbXB0eSgpCgl7CgkJaWYgKHRvcCA9PSBmcm9udCkKCQkJcmV0dXJuIHRydWU7CgkJZWxzZQoJCQlyZXR1cm4gZmFsc2U7Cgl9Cglib29sIGZ1bGwoKQoJewoJCWlmICgodG9wICsgMSkgJSBNQVggPT0gZnJvbnQpCgkJCXJldHVybiB0cnVlOwoJCWVsc2UKCQkJcmV0dXJuIGZhbHNlOwoJfQoJdm9pZCBwdXNoKGludCBhKQoJewoJCWlmIChmdWxsKCkpIHJldHVybjsKCQlpZiAodG9wID09IDApCgkJCSsrdG9wOwoJCXN0YXF1ZVsodG9wKyspJU1BWF0gPSBhOwoJfQoJaW50IHBvcCgpCgl7CgkJaWYgKGVtcHR5KCkpCgkJCXJldHVybiAwOwoJCXJldHVybiBzdGFxdWVbKC0tdG9wKSVNQVhdOwoJfQoJaW50IGRlU3RxKCkKCXsKCQlpZiAoZW1wdHkoKSkKCQkJcmV0dXJuIDA7CgkJcmV0dXJuIHN0YXF1ZVsoZnJvbnQrKyklTUFYXTsKCX0KfTsKCmNsYXNzIEdyYXBoCnsKcHJpdmF0ZToKCXN0ZDo6dmVjdG9yPGludD4gdmVydGV4W01BWF07CnB1YmxpYzoKCXZvaWQgbGlua1ZlcnRleChpbnQgYSwgaW50IGIpIAoJewoJCWludCBsZWZ0ID0gMCwgcmlnaHQgPSB2ZXJ0ZXhbYV0uc2l6ZSgpIC0gMTsKCQl3aGlsZSAocmlnaHQgPj0gbGVmdCkgewoJCQlpZiAoYiA+IHZlcnRleFthXS5hdCgobGVmdCArIHJpZ2h0KSAvIDIpKQoJCQkJbGVmdCA9IChsZWZ0ICsgcmlnaHQpIC8gMiArIDE7CgkJCWVsc2UgaWYgKGIgPCB2ZXJ0ZXhbYV0uYXQoKGxlZnQgKyByaWdodCkgLyAyKSkKCQkJCXJpZ2h0ID0gKGxlZnQgKyByaWdodCkgLyAyIC0gMTsKCQkJZWxzZQoJCQkJcmV0dXJuOwoJCX0KCQl2ZXJ0ZXhbYV0uaW5zZXJ0KHZlcnRleFthXS5iZWdpbigpICsgbGVmdCwgYik7Cgl9Cgl2b2lkIGluc2VydEVkZ2UoaW50IGEsIGludCBiKQoJewoJCWlmIChhID09IGIpCgkJCXJldHVybjsKCQlsaW5rVmVydGV4KGEsIGIpOwoJCWxpbmtWZXJ0ZXgoYiwgYSk7Cgl9Cgl2b2lkIERGUyhpbnQgdikKCXsKCQlTdGFxdWUgc3RhcXVlOwoJCWludCB2aXNpdGVkW01BWF0gPSB7fSwgdzsKCQl2aXNpdGVkW3ZdID0gMTsKCQlwcmludGYoIiVkICIsIHYpOwoJCXN0YXF1ZS5wdXNoKHYpOwoJCXdoaWxlICghc3RhcXVlLmVtcHR5KCkpIHsKCQkJdyA9IDA7CgkJCXdoaWxlICh3IDwgdmVydGV4W3ZdLnNpemUoKSAmJiB2aXNpdGVkW3ZlcnRleFt2XS5hdCh3KV0gPT0gMSkgdysrOwoJCQlpZiAodyA8IHZlcnRleFt2XS5zaXplKCkpIHsKCQkJCXcgPSB2ZXJ0ZXhbdl0uYXQodyk7CgkJCQl2aXNpdGVkW3ddID0gMTsKCQkJCXByaW50ZigiJWQgIiwgdyk7CgkJCQlzdGFxdWUucHVzaCh3KTsKCQkJCXYgPSB3OwoJCQl9CgkJCWVsc2UgdiA9IHN0YXF1ZS5wb3AoKTsKCQl9Cgl9Cgl2b2lkIEJGUyhpbnQgdikKCXsKCQlTdGFxdWUgc3RhcXVlOwoJCWludCB2aXNpdGVkW01BWF0gPSB7fSwgdGVtcDsKCQl2aXNpdGVkW3ZdID0gMTsKCQlwcmludGYoIiVkICIsIHYpOwoJCXN0YXF1ZS5wdXNoKHYpOwoJCXdoaWxlICghc3RhcXVlLmVtcHR5KCkpIHsKCQkJdiA9IHN0YXF1ZS5kZVN0cSgpOwoJCQlmb3IgKGludCB3ID0gMDsgdyA8IHZlcnRleFt2XS5zaXplKCk7IHcrKykgewoJCQkJdGVtcCA9IHZlcnRleFt2XS5hdCh3KTsKCQkJCWlmICh2aXNpdGVkW3RlbXBdID09IDApIHsKCQkJCQl2aXNpdGVkW3RlbXBdID0gMTsKCQkJCQlwcmludGYoIiVkICIsIHRlbXApOwoJCQkJCXN0YXF1ZS5wdXNoKHRlbXApOwoJCQkJfQoJCQl9CgkJfQoJfQp9OwoKaW50IG1haW4odm9pZCkKewoJR3JhcGggZ3JhcGg7CglpbnQgbiwgbSwgdiwgdjEsIHYyOwoJCglzY2FuZigiJWQgJWQgJWQiLCAmbiwgJm0sICZ2KTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CgkJc2NhbmYoIiVkICVkIiwgJnYxLCAmdjIpOwoJCWdyYXBoLmluc2VydEVkZ2UodjEsIHYyKTsKCX0KCWdyYXBoLkRGUyh2KTsKCXByaW50ZigiXG4iKTsKCWdyYXBoLkJGUyh2KTsKfQovKgpJbnB1dCBleGFtcGxlCjcgNiAxCjEgNAoxIDMKMSAyCjQgNgo0IDUKMiA3CgpPdXRwdXQgZXhhbXBsZQoxIDIgNyAzIDQgNSA2CjEgMiAzIDQgNyA1IDYKKi8=