#include <iostream>
#define MAX_N 1000
using namespace std;
//map의 0 에 사이즈를 저장한 인접배열
int map[MAX_N+1][MAX_N+1];
int visit[MAX_N+1];
void DFS_Recursive(int n){
cout << " " << n;
visit [n] = 1;
for(int i=1;i<=map[n][0];i++){
if(!visit[map[n][i]])
DFS_Recursive(map[n][i]);
}
}
int stack[MAX_N+1];
int stack_p =0 ;
void DFS_Stack(int v){
stack[stack_p++] = v;
while (stack_p > 0){
v = stack[--stack_p];
if(!visit[v]){
cout << " " << v;
visit[v] = 1;
for(int w=1;w<=map[v][0];w++){
if(!visit[map[v][w]])
stack[stack_p++] = map[v][w];
}
}
}
}
int queue_p_begin = 0;
int queue_p_end = 0;
int queue[MAX_N+1];
void BFS_Queue(int v){
queue_p_begin = 0;
queue[queue_p_begin] = v;
queue_p_end = 1;
while (queue_p_begin < queue_p_end){
v = queue[queue_p_begin++];
if(!visit[v]){
cout << " " << v;
visit[v] = 1;
for(int w=1;w<=map[v][0];w++){
if(!visit[map[v][w]])
queue[queue_p_end++] = map[v][w];
}
}
}
}
int main(){
int T, test_case;
int N;
int src,dst;
freopen ( "sample_input.txt", "r", stdin );
cin >> T;
for(test_case = 1; test_case <= T; test_case++){
for(int i=0;i<=MAX_N; i++){
map[i][0] = 0;
}
cin >> N;
cout << "Graph" <<endl;
for(int i=0;i<N;i++){
cin >> src &\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0gt;> dst;
map[src][0]++;
map[src][map[src][0]] = dst;
cout << src << " -> "<<dst << endl;
}
for(int i=0;i<=MAX_N; i++) visit[i] = 0;
//BFS(Queue)
cout << "BFS(Queue):";
BFS_Queue(1);
cout << endl;
//DFS(Recursive)
cout << "DFS(Recu.):";
for(int i=0;i<=MAX_N; i++) visit[i] = 0;
DFS_Recursive(1);
cout << endl;
//DFS(Stack)
cout << "DFS(Stack):";
for(int i=0;i<=MAX_N; i++) visit[i] = 0;
stack_p =0;
DFS_Stack(1);
cout << endl;
//Dijkstra
}
return 0;
}