#include <bits/stdc++.h>
using namespace std;
const int N=3005;
int read(){
	int x=0;
	char ch=getchar();
	while (!isdigit(ch))
		ch=getchar();
	while (isdigit(ch))
		x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return x;
}
int n,a[N],A[N];
vector <int> e[N];
bool dfs(int x,int pre){
	bool res=0;
	for (auto y : e[x])
		if (y!=pre)
			res|=a[x]>a[y]&&!dfs(y,x);
	return res;
}
bool check(int x){
	return dfs(x,0);
}
int main(){
	n=read();
	for (int i=1;i<=n;i++){
		a[i]=read();
		e[i].clear();
	}
	for (int i=1;i<n;i++){
		int a=read(),b=read();
		e[a].push_back(b);
		e[b].push_back(a);
	}
	for (int i=1;i<=n;i++)
		if (check(i))
			printf("%d ",i);
	return 0;
}

/*

1.	走一个子树，对手只需要在子树里就可以打败你。
2.	可以强制走一个子树使得对手在这个子树里并获胜。
3.	对手可以肛回来打败你。
当且仅当第 2 种情况可以胜利。

*/