#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,a,n) for(int i=(a); i<(int)(n); i++) #define rep(i,n) REP(i,0,n) #define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it) #define ALLOF(c) (c).begin(), (c).end() typedef long long ll; #define INF 99999999 int N, M, Q; vector< pair > G[200005]; int ret[200005]; bool visited[200005]; void dijkstra(){ rep(i,200005){ ret[i] = INF; visited[i] = false; } ret[0] = 0; while(true){ int minPos, minVal = INF; rep(i,N){ if(minVal>ret[i] && !visited[i]){ minVal = ret[i]; minPos = i; } } if(minVal == INF) break; visited[minPos] = true; rep(i,G[minPos].size()){ int nxt = G[minPos][i].first; int cst = G[minPos][i].second; if(ret[nxt] == INF){ ret[nxt] = cst; }else{ ret[nxt] = max(ret[nxt], cst); } } } } int main(){ ios::sync_with_stdio(false); cin >> N >> M >> Q; rep(i,M){ int a, b; cin >> a >> b; a--; b--; G[a].push_back(make_pair(b, -1)); G[b].push_back(make_pair(a, -1)); } rep(i,Q){ int c, d; cin >> c >> d; c--; d--; G[c].push_back(make_pair(d, i+1)); G[d].push_back(make_pair(c, i+1)); } dijkstra(); rep(i,N){ if(ret[i] == INF){ cout << 0 << endl; } else if(ret[i] == 0){ cout << -1 << endl; }else{ cout << ret[i] << endl; } } return 0; }