Help me in solving DISHOWN problem

Do not why getting wrong ans

#include <iostream>
#include<bits/stdc++.h>
#define ll long long int
#define mod 1000000007
using namespace std;

ll power(ll a, ll b) {
  ll res = 1;

  while (b) {
    if (b & 1) {
      res = res * a % mod;
    }

    b >>= 1;
    a = a * a % mod;
  }

  return res;
}

ll inv(ll a) {
  return power(a, mod - 2);
}
class DisjointSet {
    vector<int> rank, parent;
public:
    DisjointSet(int n) {
        parent.resize(n + 1);
        for (int i = 0; i <= n; i++) {
            parent[i] = i;
        }
    }

    int findUPar(int node) {
        if (node == parent[node])return node;
        return parent[node] = findUPar(parent[node]);
    }

    void unionByRank(int u, int v) {
        parent[u]=v;
    }
};
int main() {
	int t;cin>>t;
	while(t--){
	    int n;cin>>n;
	    int A[n+1];
	    for(int i=1;i<=n;i++){
	        cin>>A[i];
	    }
	    DisjointSet ds(n);
	    int q;cin>>q;
	    while(q--){
	        int x;cin>>x;
	        if(x==0){
	            int a,b;cin>>a>>b;
	            int ap=ds.findUPar(a);
	            int bp=ds.findUPar(b);
	            if(ap==bp){
	                cout<<"Invalid query!\n";
	            }
	            else {
	                if(A[a]<A[b])ds.unionByRank(ap,bp);
	                else if(A[a]>A[b])ds.unionByRank(bp,ap);
	            }
	        }
	        else {
	            int y;cin>>y;
	            int ans=ds.findUPar(y);
	            cout<<ans<<endl;
	        }
	    }
	}
	cerr << "Time : " << 1000 * ((double)clock()) / CLOCKS_PER_SEC << "ms" << endl;
	return 0;
}