
// Problem: E. Plan of Lectures
// Contest: Codeforces - Educational Codeforces Round 100 (Rated for Div. 2)
// URL: https://codeforces.com/contest/1463/problem/E
// Memory Limit: 512 MB
// Time Limit: 2000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)

#include<bits/stdc++.h>
#define rep(i,x,y) for(auto i=(x);i<=(y);++i)
#define dep(i,x,y) for(auto i=(x);i>=(y);--i)
#define fr first
#define sc second
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,ll>pil;
typedef pair<int,int>pii;
typedef pair<ll,ll>pll;
const int N=3e5+10;
const int inf=1e9;
const int mo=998244353;
vector<int> G[N],vec[N],ans;
int in[N]={0};
int n,m;
bool topsort(){
    queue<int> que;
    //rep(i,1,n) cout<<in[i]<<" ";
    //cout<<endl;
    rep(i,1,n) if(!in[i]){
            que.push(i);
            ans.push_back(i);
        }
    while(!que.empty()){
        int u=que.front(); que.pop();
        for(auto v:G[u]){
        	//cout<<v<<endl;
            if(!--in[v]){
                que.push(v);
                ans.push_back(v);
            }
        }
    }
    rep(i,1,n) if(in[i]) return false;
    return true;
}
int tag[N]={0};
int pre[N]={0},nxt[N]={0},id[N]={0},p[N]={0},cnt=0;
vector<pii> eset;
int main(){
    //freopen("D:\\in.txt","r",stdin);
    //freopen("D:\\out.txt","w",stdout);
    int k; cin>>n>>k;
    rep(i,1,n){
        int u; scanf("%d",&u);
		if(u) eset.push_back({u,i});
    }
    bool ok=1;
    rep(i,1,k){
    	int x,y; scanf("%d%d",&x,&y);
    	if(!nxt[x]&&!pre[y]) nxt[x]=y,pre[y]=x;
    	else {//cout<<"ps1\n";
    		ok=0;
    	}
    }
    rep(i,1,n){
    	if(pre[i]&&!id[i]){
    		int u=pre[i],pri=0;
    		cnt++;
    		for(;pre[u];u=pre[u]) if(u==i) {
    			//cout<<"ps2\n";
    			ok=0; break;
    		}
    		if(!ok) break;
    		for(;u;u=nxt[u]){
    			vec[cnt].push_back(u);
    			id[u]=cnt,p[u]=++pri;
    		}
    	}
    }
    rep(i,1,n) if(!id[i]) {
    	id[i]=++cnt;
    	vec[cnt].push_back(i);
    }
    //rep(i,1,n) cout<<id[i]<<" ";
    //cout<<endl;
    n=cnt;
	for(auto &e:eset){
		if(id[e.fr]==id[e.sc]) {
			if(p[e.fr]>p[e.sc]) {ok=0;}
			e.fr=e.sc=0;
		}
		else e.fr=id[e.fr],e.sc=id[e.sc];
	}
	for(auto e:eset){
		G[e.fr].push_back(e.sc);
		in[e.sc]++;
	}
    if(!topsort()) ok=0;
    if(ok) {
    	for(auto x:ans){
    		for(auto v:vec[x]) cout<<v<<" ";
    	}
    }
    else cout<<"0\n";
    return 0;
}