vector> adj; map, int> known; int treeLabel(int v, int from = -1) { vector children; for (int u : adj[v]) { if (u == from) continue; children.push_back(treeLabel(u, v)); } sort(all(children)); if (known.find(children) == known.end()) { known[children] = sz(known); } return known[children]; }