#include using namespace std; #define ALL(x) x.begin(),x.end() #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b ostream &operator<<(ostream &os,const pair&p){ os< ostream &operator<<(ostream &os,const vector&v){ for(int i=0;i<(int)v.size();i++) os< par; vector siz; int c;//親の個数(グループ数) void init(int n){ c=n; for(int i=0;i; signed main(){ int n,m,q;cin>>n>>m>>q; set

st; rep(i,m){ int u,v;cin>>u>>v;u--,v--; if(u>v)swap(u,v); st.insert(P(u,v)); } vector

qs; rep(i,q){ int u,v;cin>>u>>v;u--,v--; if(u>v)swap(u,v); qs.push_back(P(u,v)); st.erase(P(u,v)); } UnionFind uf(n); for(auto [u,v]:st){ uf.unite(u,v); } vector par(n); vector> g(n); rep(i,n){ g[uf.root(i)].push_back(i); par[i]=uf.root(i); } vector ans(n,-1); for(int i=q-1;i>=0;i--){ auto [u,v]=qs[i]; u=par[u],v=par[v]; if(u==v) continue; if(u==par[0]){ while(!g[v].empty()){ int x=g[v].back();g[v].pop_back(); ans[x]=i+1;par[x]=u; g[u].push_back(x); } } else if(v==par[0]){ while(!g[u].empty()){ int x=g[u].back();g[u].pop_back(); ans[x]=i+1;par[x]=v; g[v].push_back(x); } } else{ if(g[u].size()>g[v].size())swap(u,v); // u->v while(!g[u].empty()){ int x=g[u].back();g[u].pop_back(); par[x]=v; g[v].push_back(x); } } } for(int i=1;i