#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; int n,m,q; vector A,B,C,D; map> mp; vector g[100001]; int main(){ cin>>n>>m>>q; // cout << n << " " << m << " " << q << endl; rep(i,m){ int aa,bb;cin>>aa>>bb; A.PB(aa-1); B.PB(bb-1); // cout << aa-1 << " " << bb-1 << endl; } rep(i,q){ int cc,dd;cin>>cc>>dd; cc--,dd--; // cout << cc << " " << dd << endl; C.PB(cc); D.PB(dd); mp[cc][dd]=mp[dd][cc]=true; } rep(i,m){ int a=A[i],b=B[i]; if(mp[a][b]) continue; g[a].PB(b); g[b].PB(a); } // for(int i=0;i vis(n,false); vis[0]=true; queue que; que.push(0); while(!que.empty()){ int v=que.front(); que.pop(); for(int i=0;i ans(n,INF); rep(i,n) if(vis[i]){ ans[i]=-1; } //cout << ans << endl; for(int i=q-1;i>=0;i--){ int u=C[i],v=D[i]; if(!vis[u] and !vis[v]){ g[u].PB(v); g[v].PB(u); continue; } else if(vis[u] and vis[v]){ continue; } else{ if(!vis[u] and vis[v]) swap(u,v); queue q; q.push(v); vis[v]=true; while(!q.empty()){ int vv=q.front();q.pop(); for(int j=0;j