#include #include #include #include #include using namespace std; using mint=atcoder::modint998244353; int N,Q; struct dat{ setVs; vector >Qs; mint ans; }; int pr[2<<17]; dat V[2<<17]; int ans[3<<17]; int op[3<<17],A[3<<17],B[3<<17]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N,X,Q; cin>>N>>X>>Q; for(int i=0;i>op[i]; if(op[i]==1) { cin>>A[i]>>B[i]; } else if(op[i]==2) { cin>>A[i]>>B[i]; if(A[i]==B[i])ans[i]=0; else { V[A[i]].Qs.push_back(make_pair(B[i],i)); V[B[i]].Qs.push_back(make_pair(A[i],i)); ans[i]=2e9; } } else if(op[i]==3) { cin>>A[i]; } else { cin>>A[i]; } } for(int i=0;iV[pv].Qs.size()) { for(pairq:V[pv].Qs) { int x=q.first; if(V[pu].Vs.find(x)!=V[pu].Vs.end()) { ans[q.second]=min(ans[q.second],w); } else V[pu].Qs.push_back(q); } } else { for(pairq:V[pu].Qs) { int x=q.first; if(V[pv].Vs.find(x)!=V[pv].Vs.end()) { ans[q.second]=min(ans[q.second],w); } else V[pv].Qs.push_back(q); } swap(V[pu].Qs,V[pv].Qs); } for(int x:V[pv].Vs) { V[pu].Vs.insert(x); pr[x]=pu; } } else if(op[i]==2) { int d=ans[i]; if(d==(int)2e9)cout<<"-1\n"; else { cout<