#include <cstdio>
#include <cstring>
#define MAXN 3010

struct edge{
	int to,next;
	edge(int _to=0,int _next=0):to(_to),next(_next){}
}e[MAXN<<1];

int n;
int a[MAXN];
int g[MAXN],nume;

void addEdge(int u,int v){
	e[nume]=edge(v,g[u]);
	g[u]=nume++;
}

bool dfs(int x,int p){
	for(int i=g[x];~i;i=e[i].next)
		if(a[x]>a[e[i].to])
			if(!dfs(e[i].to,x)) return 1;
	return 0;
}

int main(){
	memset(g,-1,sizeof g);
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",a+i);
	for(int i=1;i<n;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		addEdge(u,v);
		addEdge(v,u);
	}
	for(int i=1;i<=n;i++)
		if(dfs(i,0)) printf("%d ",i);
	return 0;
}
