// // Created by cteam057 on 12/1/19. // #include using namespace std; #define rep(i, a, b) for(int i = a;i < (b);++i) #define sz(x) (int)(x).size() typedef vector vi; struct UF{ vi e; UF(int n): e(n, -1){ number = n; } int number; int size(int x){return -e[find(x)];} int find(int x){ return e[x] < 0 ? x : e[x] = find(e[x]); } void join(int a, int b){ a = find(a), b =find(b); // cout << "find " << a << ' ' << b << endl; if(a==b) return; number--; if(e[a] > e[b]) swap(a,b); e[a] += e[b]; e[b] = a; } int get_number(){ return number; } }; struct node{ set edges; }; int main() { ios_base::sync_with_stdio(0); int n, e, p; cin >> n >> e >> p; vector g(n+1); for(int i=0;i> u >> v; g[u].edges.insert(v); g[v].edges.insert(u); } for(int i=0;i> m; vector t; for(int j=0;j> x; t.push_back(x); } map index; sort(t.begin(), t.end()); for(int j=0;j