#include #define fi first #define se second #define rep(i,s,n) for (int i = (s); i < (n); ++i) #define rrep(i,n,g) for (int i = (n)-1; i >= (g); --i) #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define len(x) (int)(x).size() #define dup(x,y) (((x)+(y)-1)/(y)) #define pb push_back #define eb emplace_back #define Field(T) vector> using namespace std; using ll = long long; using ull = unsigned long long; template using pq = priority_queue,greater>; using P = pair; templatebool chmax(T&a,T b){if(abool chmin(T&a,T b){if(b> n; vector> G(n); rep(i,0,n-1) { int u, v; cin >> u >> v; --u, --v; G[u].eb(v), G[v].eb(u); } vector> sl(n), sr(n); function dfs = [&](int v, int pv) { if (pv != -1) G[v].erase(find(all(G[v]), pv)); sl[v].resize(len(G[v])+1), sr[v].resize(len(G[v])+1); rep(i,0,len(G[v])) { sl[v][i+1] = dfs(G[v][i], v)+1; sr[v][i] = sl[v][i+1]; } rep(i,0,len(G[v])) sl[v][i+1] = max(sl[v][i+1], sl[v][i]); rrep(i,len(G[v]),0) sr[v][i] = max(sr[v][i+1], sr[v][i]); return sl[v].back(); }; dfs(0, -1); vector val(n); function dfs2 = [&](int v, int x) { val[v] = x; rep(i,0,len(G[v])) { dfs2(G[v][i], max(x, max(sl[v][i], sr[v][i+1]))+1); } }; dfs2(0, 0); // rep(i,0,n) { // cout << sl[i].back() << " "; // } // cout << endl; // rep(i,0,n) { // cout << val[i] << " "; // } // cout << endl; int ans = 0; rep(i,0,n) { vector x; x.eb(val[i]); for (int nv : G[i]) x.eb(sl[nv].back()+1); sort(rall(x)); rep(j,0,len(x)) { // cout << x[j] << " "; ans = max(ans, x[j]*(j+1)+1); } // cout << endl; } cout << ans << endl; return 0; }