#pragma once
#include<utility>
#include<vector>usingnamespacestd;template<typenameG>vector<int>centroid(constG&g){constintN=(int)g.size();vector<pair<int,int>>st;st.emplace_back(0,-1);vector<int>sz(N),par(N);while(!st.empty()){autop=st.back();if(sz[p.first]==0){sz[p.first]=1;for(auto&to:g[p.first])if(to!=p.second)st.emplace_back(to,p.first);}else{for(auto&to:g[p.first])if(to!=p.second)sz[p.first]+=sz[to];par[p.first]=p.second;st.pop_back();}}vector<int>ret;intsize=N;for(inti=0;i<N;i++){intval=N-sz[i];for(auto&to:g[i])if(to!=par[i])val=max(val,sz[to]);if(val<size)size=val,ret.clear();if(val==size)ret.emplace_back(i);}returnret;}