#include using namespace std; #define REP(i,n) for(int i=0;i ostream& operator<<(ostream& os,const vector& vec){ os << "["; for(const auto& v : vec){ os << v << ","; } os << "]"; return os; } typedef long long ll; typedef unsigned long long ull; typedef pair pii; typedef vector vi; typedef vector vvi; struct UnionFind{/*{{{*/ vector rank,parent; vector> groupe; UnionFind(int n) : rank(n) , parent(n) , groupe(n) { rank.assign(n,0); parent.assign(n,0); for(int i=0;i g; int C[200001],D[200001]; int main(){ cin>>N>>M>>Q; rep(i,M){ int a,b;cin>>a>>b; if(a>b) swap(a,b); g.insert(MP(a-1,b-1)); } rep(i,Q){ cin>>C[i]>>D[i]; C[i]--,D[i]--; if(C[i]>D[i]) swap(C[i],D[i]); g.erase(MP(C[i],D[i])); } UnionFind uf(N); for(auto t:g){ int u=t.first; int v=t.second; uf.unite(u,v); } vector ans(N,0); for(int i=0;i=0;i--){ int u=C[i],v=D[i]; u=uf.find(u); v=uf.find(v); if(u>v) swap(u,v); if(uf.same(0,v)) swap(u,v); if(!uf.same(0,u)){ uf.unite(u,v); }else{ if(uf.same(0,v)) continue; for(int j=0;j