#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<algorithm>
#define MAX 100
#define initial 1
#define waiting 2
#define visited 3
using namespace std;
int adj[MAX][MAX];
int state[MAX];
int n;
void create_graph(){
int max_edge,org,des;
cout<<"N: ";
cin>>n;
max_edge = n*(n-1);
for(int i=0;i<max_edge;i++){
cout<<i<<": ";
cin>>org>>des;
if(org==-1 && des==-1)
break;
if(org>n || des>n || org<0 || des<0){
cout<<"Invalid Edge"<<endl;
i--;
}
else
adj[org][des] = 1;
}
}
void DFS(int v){
int i;
stack<int> s;
s.push(v);
while(!s.empty()){
v = s.top();s.pop();
if(state[v]==initial){
cout<<v<<" ";
state[v] = visited;
}
for(i=n-1;i>=0;i++){
if(adj[v][i]==1 && state[i]==initial)
s.push(i);
}
}
}
void DF_travarsal(){
int v;
for(v=0;v<n;v++)
state[v] = initial;
cout<<"Starting Node: ";
cin>>v;
DFS(v);
}
void BFS(int v){
int i;
queue<int> q;
q.push(v);
state[v] = waiting;
while(!q.empty()){
v = q.front();q.pop();
cout<<"v: "<<v<<endl;
state[v] = visited;
for(i=0;i<n;i++){
if(adj[v][i]==1 && state[i]==initial){
q.push(i);
state[i] = waiting;
}
}
}
}
void BF_travarsal(){
int v;
for(v=0;v<n;v++)
state[v] = initial;
cout<<"Starting Node: "<<endl;
cin>>v;
BFS(v);
}
int main(){
create_graph();
DF_travarsal();
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8Y21hdGg+CiNpbmNsdWRlPGNzdHJpbmc+CiNpbmNsdWRlPHN0cmluZz4KI2luY2x1ZGU8c3RhY2s+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxhbGdvcml0aG0+CiNkZWZpbmUgTUFYIDEwMAojZGVmaW5lIGluaXRpYWwgMQojZGVmaW5lIHdhaXRpbmcgMgojZGVmaW5lIHZpc2l0ZWQgMwp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgYWRqW01BWF1bTUFYXTsKaW50IHN0YXRlW01BWF07CmludCBuOwp2b2lkIGNyZWF0ZV9ncmFwaCgpewoJaW50IG1heF9lZGdlLG9yZyxkZXM7Cgljb3V0PDwiTjogIjsKCWNpbj4+bjsKCW1heF9lZGdlID0gbioobi0xKTsKCWZvcihpbnQgaT0wO2k8bWF4X2VkZ2U7aSsrKXsKCQljb3V0PDxpPDwiOiAiOwoJCWNpbj4+b3JnPj5kZXM7CgkJaWYob3JnPT0tMSAmJiBkZXM9PS0xKQoJCQlicmVhazsKCQlpZihvcmc+biB8fCBkZXM+biB8fCBvcmc8MCB8fCBkZXM8MCl7CgkJCWNvdXQ8PCJJbnZhbGlkIEVkZ2UiPDxlbmRsOwoJCQlpLS07CgkJfQoJCWVsc2UKCQkJYWRqW29yZ11bZGVzXSA9IDE7Cgl9Cn0Kdm9pZCBERlMoaW50IHYpewoJaW50IGk7CglzdGFjazxpbnQ+IHM7CglzLnB1c2godik7Cgl3aGlsZSghcy5lbXB0eSgpKXsKCQl2ID0gcy50b3AoKTtzLnBvcCgpOwoJCWlmKHN0YXRlW3ZdPT1pbml0aWFsKXsKCQkJY291dDw8djw8IiAiOwoJCQlzdGF0ZVt2XSA9IHZpc2l0ZWQ7CgkJfQoJCWZvcihpPW4tMTtpPj0wO2krKyl7CgkJCWlmKGFkalt2XVtpXT09MSAmJiBzdGF0ZVtpXT09aW5pdGlhbCkKCQkJCXMucHVzaChpKTsKCQl9Cgl9Cn0Kdm9pZCBERl90cmF2YXJzYWwoKXsKCWludCB2OwoJZm9yKHY9MDt2PG47disrKQoJCXN0YXRlW3ZdID0gaW5pdGlhbDsKCWNvdXQ8PCJTdGFydGluZyBOb2RlOiAiOwoJY2luPj52OwoJREZTKHYpOwp9CnZvaWQgQkZTKGludCB2KXsKCWludCBpOwoJcXVldWU8aW50PiBxOwoJcS5wdXNoKHYpOwoJc3RhdGVbdl0gPSB3YWl0aW5nOwoJd2hpbGUoIXEuZW1wdHkoKSl7CgkJdiA9IHEuZnJvbnQoKTtxLnBvcCgpOwoJCWNvdXQ8PCJ2OiAiPDx2PDxlbmRsOwoJCXN0YXRlW3ZdID0gdmlzaXRlZDsKCQlmb3IoaT0wO2k8bjtpKyspewoJCQlpZihhZGpbdl1baV09PTEgJiYgc3RhdGVbaV09PWluaXRpYWwpewoJCQkJcS5wdXNoKGkpOwoJCQkJc3RhdGVbaV0gPSB3YWl0aW5nOwoJCQl9CgkJfQoJfQp9CnZvaWQgQkZfdHJhdmFyc2FsKCl7CglpbnQgdjsKCWZvcih2PTA7djxuO3YrKykKCQlzdGF0ZVt2XSA9IGluaXRpYWw7Cgljb3V0PDwiU3RhcnRpbmcgTm9kZTogIjw8ZW5kbDsKCWNpbj4+djsKCUJGUyh2KTsKfQppbnQgbWFpbigpewoJY3JlYXRlX2dyYXBoKCk7CglERl90cmF2YXJzYWwoKTsKCXJldHVybiAwOwp9