// // 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); 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{ vector 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.push_back(v); g[v].edges.push_back(u); } for (auto &x: g) { sort(x.edges.begin(), x.edges.end()); } for(int i=0;i> m; vector t; t.reserve(m); for(int j=0;j> x; t.push_back(x); } unordered_map index; sort(t.begin(), t.end()); for(int j=0;j