#include #include using namespace std; struct Graph { int n; std::vector> g; Graph(){} Graph(int n) : n(n){ g.resize(n); } void add_edge(int from, int to){ g[from].push_back(to); } }; int main() { int n, m; cin >> n >> m; int a[100005]; for(int i = 0; i < n; i++) cin >> a[i]; Graph g(n); int d[100005]{0}; for(int i = 0; i < m; i++){ int u, v; cin >> u >> v; u--; v--; if(a[u] < a[v]){ g.add_edge(u, v); d[v]++; } if(a[u] > a[v]){ g.add_edge(v, u); d[u]++; } } int k; cin >> k; bool b[100005]{0}; for(int i = 0; i < k; i++){ int u; cin >> u; u--; b[u] = true; } queue que; for(int u = 0; u < n; u++){ if(!d[u]) que.push(u); } vector ans; while(que.size()){ int u = que.front(); que.pop(); if(b[u]) ans.push_back(u); for(int v : g.g[u]){ if(b[u]) b[v] = !b[v]; d[v]--; if(!d[v]) que.push(v); } } cout << (int)ans.size() << endl; for(int u : ans) cout << u + 1 << endl; cout << endl; }