//agrawal117
//chahatagrawal117
#include<bits/stdc++.h>
#define endl '\n'
#define mod 1000000007
typedef long long int ll;
using namespace std;
#define MAX 400005
vector<int> v[MAX];
int vis[MAX];
int dsu[MAX];
int cmp;
vector<int> fck[MAX];
int inddex[MAX];
void dfs(int node, int par)
{
    vis[node]=0;
    dsu[node]=cmp;
    inddex[node]=fck[cmp].size();
    fck[cmp].push_back(node);
    for( auto i : v[node]){
        if(vis[i]==-1){
            dfs(i,node);
        }
        else if(vis[i]==0 && i!=par) {
            cout<<0<<endl;
            exit(0);
        }
    }
    vis[node]=1;
}

vector<int> vv[MAX];
int in[MAX];
vector<int> topo;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,k; cin>>n>>k;
    int arr[n+2]; 
    for(int i=1;i<=n;i++) cin>>arr[i];
    for(int i=1;i<=k;i++){
        int a,b; cin>>a>>b;
        v[a].push_back(b);
        in[b]++;
    }
    for(int i=1;i<=n;i++) vis[i]=-1;
    cmp=0;
    for(int i=1;i<=n;i++){
        if(in[i]==0) {
            cmp++;
            dfs(i,i);
        }
    }
    int N=cmp;
    
    // cout<<N<<endl;
    for(int i=1;i<=N;i++) in[i]=0;
    for(int i=1;i<=n;i++){
        if(arr[i]==0) continue;
        int a=dsu[arr[i]];
        int b=dsu[i];
        if(a==b) {
            a=arr[i]; b=i;
            if(inddex[a]<inddex[b]) continue;
            else {
                cout<<0<<endl;
                exit(0);
            }
        }
        
        in[b]++;
        vv[a].push_back(b);
    }
    // for(int i=1;i<=N;i++) cout<<in[i]<<" ";
    // cout<<endl;
    
    // for(int i=1;i<=N;i++) {
    //     for(auto j: vv[i]) cout<<j<<" ";
    //     cout<<endl;
    // }
    deque<int> dq;
    ll cnt=0;
    for(int i=1;i<=N;i++) if(in[i]==0) dq.push_back(i);
    while(!dq.empty())
    {
        int node=dq[0];
        topo.push_back(node);
        cnt++;
        dq.pop_front();
        // cout<<node<<endl;
        for(auto i: vv[node]){
            in[i]--;
            // cout<<"f"<<i<<endl;
            if(in[i]==0) dq.push_back(i);
        }
    }
    if(cnt!=N)  { cout<<0; exit(0); } 
    
    for(auto node: topo)
    {
        for(auto i: fck[node]) cout<<i<<" ";
    }
    
    cout<<endl;
    
}



