#include<cstdio>

#include<iostream>

#include<cstring>

#include<algorithm>

#include<vector>

#include<queue>

using namespace std;

const int maxn=1e5+10;

const int inf=0x3f3f3f3f;

int ant;

bool vis[maxn];

vector<int>v[maxn];//存图 

void dfs(int ant)

{

	printf("%d",ant);

	vis[ant]=1;

	for(int i=0;i<v[ant].size();i++)

	{

		if(!vis[v[ant][i]])

			dfs(v[ant][i]);

	}

}

void bfs(int ant)

{

	queue<int>q;

	q.push(ant);

	while(!q.empty())

	{

		int x=q.front();

		q.pop();

		printf("%d",x);

		vis[x]=1;

		for(int i=0;i<v[x].size();i++)

		{

			if(!vis[v[x][i]])

			{

				vis[v[x][i]]=1;

				q.push(v[x][i]);

			}

		}

	}

}

void abc(int ans)

{

	if(ans==0)

		dfs(ant);

	else

		bfs(ant);

}

int main()

{

	int n,k;

	int x,y;

	int mx=-1;

	bool flag=0;

 

	int ans;

	printf("请输入点的个数:\n");

	scanf("%d",&n);

	printf("请输入各点:\n");

	for(int i=0;i<n;i++)

	{

		scanf("%d",&x);

		if(!flag)

		{

			ant=x;

			flag=1;

		}

	}

	printf("请输入边的个数:\n");

	scanf("%d",&k);

	printf("请输入各边:\n");

	for(int i=0;i<k;i++)

	{

		scanf("%d%d",&x,&y);

		v[x].push_back(y);

		v[y].push_back(x);

	}

	printf("请选择遍历方式:\ndfs:0\nbfs:1\n");

	scanf("%d",&ans);

	while(ans!=1&&ans!=0)

	{

		printf("请重新选择遍历方式\n");	

		printf("请选择遍历方式:\ndfs:0\nbfs:1\n");

		scanf("%d",&ans);

	}

	abc(ans);	

	return 0;

}

/*

8

1 2 3 4 5 6 7 8

9

1  2

1  3

2  4

2  5

4  8

5  8

3  6

3  7

6  7

1

*/