#include <bits/stdc++.h>

using namespace std;

int main(){

    int n,m;cin>>n>>m;

    vector<int> v(n+1);

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

        scanf("%d",&v[i+1]);

    }

    vector<vector<int>> vv(n+1);

    vector<int> cnt(n+1,0);

    int val1,val2;

    for(int i = 0;i<m;i++){

        scanf("%d %d",&val1,&val2);

        vv[val1].push_back(val2);

        cnt[val2]++;

    }

    priority_queue<pair<int, int>,vector<pair<int, int>>,greater<>> pq;

    for(int i = 1;i<=n;i++){

        if(cnt[i]==0){

            pq.push({v[i],i});

        }

    }

    vector<int> ans(n+1);

    int k = 1;

    while (!pq.empty()) {

        int val = pq.top().second;

        pq.pop();

        ans[k++]=val;

        for(int i = 0;i<vv[val].size();i++){

            int x = vv[val][i];

            cnt[x]--;

            if(cnt[x]==0){

                pq.push({v[x],x});

            }

        }

    }

    for(int i = 1;i<=n;i++){

        cout<<ans[i]<<" ";

    }

}

第三题