#include #include #include #include #include #include #include #include #include static const int MOD = 1000000007; using ll = long long; using u32 = unsigned; using u64 = unsigned long long; using namespace std; template constexpr T INF = ::numeric_limits::max() / 32 * 15 + 208; int main() { int n, m; cin >> n >> m; vector A(n); for (auto &&i : A) scanf("%d", &i); vector> G(n); for (int i = 0; i < m; ++i) { int u, v; scanf("%d %d", &u, &v); u--; v--; if(A[u] < A[v]) G[u].emplace_back(v); if(A[v] < A[u]) G[v].emplace_back(u); } vector on(n); int k; cin >> k; for (int i = 0; i < k; ++i) { int x; scanf("%d", &x); on[x-1]++; } vector d(n); for (int i = 0; i < n; ++i) { for (auto &&j : G[i]) { d[j]++; } } queue Q; for (int i = 0; i < n; ++i) { if(!d[i]) Q.emplace(i); } vector ans; while(!Q.empty()){ int x = Q.front(); Q.pop(); int ok = on[x]; if(on[x]) on[x] = 0, ans.emplace_back(x); for (auto &&y : G[x]) { if(ok) on[y] ^= 1; if(!(--d[y])) Q.emplace(y); } } cout << ans.size() << "\n"; for (auto &&i : ans) { cout << i+1 << "\n"; } return 0; }