#include using namespace std; #define dg pair #define a first #define b second #define mk(x,y) make_pair(x,y) 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<<1)+(x<<3)+(ch&15); ch=getchar(); } return x*f; } inline void write(int x) { if(x<0) { putchar('-'); x=-x; } if(x>9)write(x/10); putchar(x%10+'0'); return; } int tot,fa[100010],ans[100010]; vectortp[100010]; dg qry[200010]; setedge; inline int findfa(int x){return !fa[x]?x:fa[x]=findfa(fa[x]);} inline bool find(int x,int y){return findfa(x)==findfa(y); } inline void merge(int x,int y) { x=findfa(x),y=findfa(y); if(x==y)return; if(fa[x]>fa[y])swap(x,y); fa[x]+=fa[y]; fa[y]=x; } int main() { int n=read(),m=read(),q=read(); for(int i=1;i<=m;++i) { int u=read(),v=read(); if(u>v)swap(u,v); edge.insert(mk(u,v)); } for(int i=1;i<=q;++i) { int u=read(),v=read(); if(u>v)swap(u,v); edge.erase(mk(u,v)); qry[i]=mk(u,v); } for(auto syh:edge)merge(syh.a,syh.b); for(int i=1;i<=n;++i) if(find(1,i)) ans[i]=-1; for(int i=1;i<=n;++i)tp[findfa(i)].emplace_back(i); for(int i=q;i;--i) { int x=findfa(qry[i].a),y=findfa(qry[i].b); if(x==y)continue; if(find(1,y))swap(x,y); if(find(1,x)) for(auto t:tp[y]) ans[t]=i; if(tp[x].size()