#include "bits/stdc++.h" #include #define _CRT_SECURE_NO_WARNINGS #define ALL(a) (a).begin(),(a).end() #define SORT(c) sort((c).begin(),(c).end()) #define DESCSORT(c) sort(c.begin(), c.end(), greater()) using namespace std; const int dy[] = { 0, 1, 0, -1 }; const int dx[] = { 1, 0, -1, 0 }; using LL = long long int; using LD = long double; const int INF = (1 << 30) - 1; const LL INF64 = ((LL)1 << 62) - 1; const double PI = 3.1415926535897932384626433832795; using pii = pair; using pll = pair; using pdd = pair; using vi = vector; using vvi = vector; using vvvi = vector; using vl = vector; using vvl = vector; using vvvl = vector; using vd = vector; using vs = vector; using vb = vector; //============================================== const int MAX = 100030; vi A(MAX), B(MAX); int n, k, x; void solve() { int p; for (int i = 0; i < k; i++) { string sa, sb; cin >> sa >> sb; if (sa == "?" && sb == "?") { p = i; } else { A[i] = stoi(sa) - 1; B[i] = stoi(sb) - 1; } } vi rvCup(n), cup(n); for (int i = 0; i < n; i++) cin >> rvCup[i]; for (int i = 0; i < n; i++) cup[i] = i + 1; for (int i = 0; i < p; i++) { swap(cup[A[i]], cup[B[i]]); } for (int i = k - 1; i > p; i--) { swap(rvCup[A[i]], rvCup[B[i]]); } queue ans; for (int i = 0; i < n; i++) { if (cup[i] != rvCup[i]) ans.push(i + 1); } for (int i = 0; !ans.empty(); i++) { if (i) cout << " "; cout << ans.front(); ans.pop(); } cout << endl; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> k >> x; solve(); return 0; }