#pragma GCC optimize("O3") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using P = pair; using T = tuple; template inline T chmax(T &a, const T b) {return a = (a < b) ? b : a;} template inline T chmin(T &a, const T b) {return a = (a > b) ? b : a;} constexpr int MOD = 1e9 + 7; constexpr int inf = 1e9; constexpr long long INF = 1e18; #define all(a) (a).begin(), (a).end() int dx[] = {1, 0, -1, 0}; int dy[] = {0, 1, 0, -1}; int main(){ cin.tie(0); ios::sync_with_stdio(false); int n, m; cin>>n>>m; vector a(n); for(int i=0; i>a[i]; vector> G(n); for(int i=0; i>u>>v; u--, v--; G[u].emplace_back(v); G[v].emplace_back(u); } int k; cin>>k; priority_queue, greater

> que; vector light(n, 0); for(int i=0; i>b; b--; light[b] = 1; que.emplace(a[b], b); } vector ans; while(que.size()){ int ca, cv; tie(ca, cv) = que.top(); que.pop(); if(light[cv] == 0) continue; light[cv] = 0; ans.emplace_back(cv); for(auto nv : G[cv]){ if(ca < a[nv]){ light[nv] ^= 1; if(light[nv] == 1) que.emplace(a[nv], nv); } } } if(accumulate(all(light), 0) != 0){ cout << -1 << endl; } else{ cout << ans.size() << endl; for(auto i : ans) cout << i + 1 << endl; } return 0; }