#include using namespace std; inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } inline void print(int x){ static int s[20],t=0; do s[++t]=x%10,x/=10;while(x); while(t) putchar(s[t--] + '0'); } const int N=1e5+5; struct edge{ int v,id; }; int n,m,q; priority_queue a[N]; bool vis[N]; vector g[N]; int dfs(int u,int t,int mx){ int ret=0; if(a[u].top()>a[mx].top())mx=u; if(u==t)ret=mx; for(edge i:g[u]){ int v=i.v; if(vis[i.id])continue; vis[i.id]=1; ret=max(ret,dfs(v,t,mx)); } return ret; } int calc(int x,int y){ memset(vis,0,sizeof(vis)); int t=dfs(x,y,0),tt=a[t].top(); if(tt!=-1)a[t].pop(); return tt; } signed main(){ // freopen("visit.in","r",stdin); // freopen("visit.out","w",stdout); cin>>n>>m>>q; for(int i=1;i<=m;i++){ int u=read(),v=read(); g[u].push_back({v,i}); g[v].push_back({u,i}); } for(int i=0;i<=n;i++) a[i].push(-1); while(q--){ int op=read(),x=read(),y=read(); if(op==1) a[x].push(y); else cout<