#include using namespace std; #include using namespace atcoder; using ll = int64_t; using ul = uint64_t; using ld = long double; using vi = vector; using vd = vector; using vc = vector; using vs = vector; using vb = vector; using vl = vector; using vvi = vector; using vvd = vector; using vvc = vector; using vvb = vector; using vvl = vector; using mint = modint998244353; using vm = vector; int main() { ll N,M,Q; cin >> N >> M >> Q; vector> LR(M); for (int i = 0; i < M; i++) { cin >> LR[i].first >> LR[i].second; LR[i].first--,LR[i].second--; } vvl query(Q, vl(4)); for (int i = 0; i < Q; i++) { cin >> query[i][1] >> query[i][2]; query[i][0] = query[i][1]%M; query[i][2]--; query[i][3] = i; } sort(query.begin(), query.end()); vi A(N); for (int i = 0; i < N; i++) A[i] = i; for (int i = 0; i < M; i++) swap(A[LR[i].first],A[LR[i].second]); vvi dp(70, vi(N)); for (int i = 0; i < N; i++) { dp[0][i] = A[i]; } for (int i = 1; i < 70; i++) { for (int j = 0; j < N; j++) { dp[i][j] = dp[i - 1][dp[i - 1][j]]; } } for (int i = 0; i < N; i++) { A[i] = i; } int mod = 0; vi ans(Q); for (int i = 0; i < Q; i++) { for (; mod < query[i][0]; mod++) { swap(A[LR[mod].first], A[LR[mod].second]); } ll t = query[i][1]/M, p = 1, e = 0; while(p*2 <= t) { p *= 2; e++; } int x = query[i][2]; while(t > 0) { if (t < p) { p /= 2; e--; continue; } t -= p; x = dp[e][x]; p /= 2; e--; } x = A[x]; ans[query[i][3]] = x + 1; } for (int i = 0; i < Q; i++) { cout << ans[i] << endl; } return 0; }