#include <bits/stdc++.h>
using ll = long long;
class djf{
    public:
    ll n;
    std::vector<ll> par , size;
    djf(ll n ) : n(n) , par(n+1) , size(n+1){
        for(int i = 0 ; i < n; i++){
            par[i] = i;
            size[i] = i;
        }
    }
    ll root(ll x){
        if(par[x] == x){
            return x;
        }
        return root(par[x]);
    }
    void merge(ll u ,ll v){
        u = root(u);
        v = root(v);
        if(u == v){
            return;
        }
        if(size[u] < size[v]){
            std::swap(u , v);
        }
        // u is bigger than v 
        par[v] = u;
        size[u] = size[u] + size[v];
    }
};
int main(){
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    ll n , q;
    std::cin >> n >> q;
    djf s(2*n);
    while(q--){
        char t;
        ll a, b;
        std::cin >> t >> a >> b;
        if(t == 'A'){
          s.merge( a, b+n);
          s.merge(b , a+n);
        }
        else if( t == 'R'){
            s.merge(a , b);
            s.merge(a+n , b+n);
        }
        else{
            if(s.root(a)  == s.root(b)){
                std::cout << "R\n";
            }
            else if(s.root(a)  == s.root(b+n)){
                std::cout << "A\n";
            }
            else{
                std::cout << "?\n";
            }
        }
    }
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |