#include // clang-format off using namespace std;constexpr int INF=1001001001;constexpr long long INFll=1001001001001001001;namespace viewer{using s=string;templates f(T i){s S=i==INF||i==INFll?"inf":to_string(i);return s(max(0,3-int(S.size())),' ')+S;} templateauto v(T&x,s&&e)->decltype(cerr<void v(const pair&p,s&&e="\n"){cerr<<"(";v(p.first,", ");v(p.second,")"+e);}templatevoid v(const tuple&t,s&&e="\n"){cerr<<"(";v(get<0>(t),", ");v(get<1>(t),")"+e);}templatevoid v(const tuple&t,s&&e="\n"){cerr<<"(";v(get<0>(t),", ");v(get<1>(t),", ");v(get<2>(t),")"+e);}templatevoid v(const tuple&t,s&&e="\n"){cerr<<"(";v(get<0>(t),", ");v(get<1>(t),", ");v(get<2>(t),", ");v(get<3>(t),")"+e);} templatevoid v(const vector&vx,s);templateauto ve(int,const vector&vx)->decltype(cerr<auto ve(bool,const vector&vx){cerr<<"{\n";for(const T&x:vx)cerr<<" ",v(x,",");cerr<<"}\n";}templatevoid v(const vector&vx,s){ve(0,vx);} templatevoid v(const deque&q,s&&e){v(vector(q.begin(),q.end()),e);}templatevoid v(const set&S,s&&e){v(vector(S.begin(),S.end()),e);}templatevoid v(const multiset&S,s&&e){v(vector(S.begin(),S.end()),e);}templatevoid v(const unordered_set&S,s&&e){v(vector(S.begin(),S.end()),e);} templatevoid v(const priority_queue&p,s&&e){priority_queueq=p;vectorz;while(!q.empty()){z.push_back(q.top());q.pop();}v(z,e);}templatevoid v(const map&m,s&&e){cerr<<"{"<<(m.empty()?"":"\n");for(const auto&kv:m){cerr<<" [";v(kv.first,"");cerr<<"] : ";v(kv.second,"");cerr<<"\n";}cerr<<"}"+e;} templatevoid _view(int n,s&S,T&var){cerr<<"\033[1;32m"<void grid(T _){}void grid(const vector>&vvb){cerr<<"\n";for(const vector&vb:vvb){for(const bool&b:vb)cerr<<(b?".":"#");cerr<<"\n";}} void _debug(int,s){}templatevoid _debug(int n,s S,const H&h,const T&... t){int i=0,cnt=0;for(;iap;mint re=a;for(long long r=1;r& bef_lookup, vector& aft, int x) { int Px_fake = aft[x]; int idx = bef_lookup[Px_fake]; return idx + 1; } int main() { cin.tie(0); ios::sync_with_stdio(false); int N, K, Q; cin >> N >> K >> Q; vector> ABs(K); for (int i = 0; i < K; i++) { int A; int B; cin >> A >> B; A--; B--; ABs[i] = {A, B}; } map>> m; vector> LRXs(Q); for (int i = 0; i < Q; i++) { int L; int R; int X; cin >> L >> R >> X; L--; // R--; X--; LRXs[i] = {L, R, X}; m[R].push_back(make_pair(i, X)); } vector Px_fakes(Q); { vector Ps(N); iota(Ps.begin(), Ps.end(), 0); vector lookup(N); iota(lookup.begin(), lookup.end(), 0); for (auto& [idx, x] : m[0]) { Px_fakes[idx] = Ps[x]; } for (int i = 0; i < K; i++) { auto [A, B] = ABs[i]; swap(lookup[Ps[A]], lookup[Ps[B]]); swap(Ps[A], Ps[B]); for (auto& [idx, x] : m[i + 1]) { Px_fakes[idx] = Ps[x]; } } } debug(Px_fakes); map>> m2; for (int i = 0; i < Q; i++) { auto [L, R, X] = LRXs[i]; m2[L].push_back(make_pair(i, Px_fakes[i])); } vector ans(Q); { vector Ps(N); iota(Ps.begin(), Ps.end(), 0); vector lookup(N); iota(lookup.begin(), lookup.end(), 0); for (auto& [idx, x] : m2[0]) { ans[idx] = lookup[x]; } for (int i = 0; i < K; i++) { auto [A, B] = ABs[i]; swap(lookup[Ps[A]], lookup[Ps[B]]); swap(Ps[A], Ps[B]); for (auto& [idx, x] : m2[i + 1]) { ans[idx] = lookup[x]; } } } debug("---"); for (auto& elem : ans) cout << elem + 1 << '\n'; return 0; }