#include using namespace std; int dia(vector> G){ int N = G.size(); queue q; vector d(N, -1); d[0] = 0; q.push(0); while (!q.empty()){ int v = q.front(); q.pop(); for (int i : G[v]){ if (d[i] == -1){ d[i] = d[v] + 1; q.push(i); } } } int k = max_element(d.begin(), d.end()) - d.begin(); d = vector(N, -1); d[k] = 0; q.push(k); while (!q.empty()){ int v = q.front(); q.pop(); for (int i : G[v]){ if (d[i] == -1){ d[i] = d[v] + 1; q.push(i); } } } return *max_element(d.begin(), d.end()); } int main(){ int N; cin >> N; vector> G(N); for (int i = 0; i < N - 1; i++){ int u, v; cin >> u >> v; u--; v--; G[u].push_back(v); G[v].push_back(u); } queue q; vector d(N, -1); for (int i = 0; i < N; i++){ if ((int) G[i].size() == 1){ q.push(i); d[i] = 0; } } while (!q.empty()){ int v = q.front(); q.pop(); for (int i : G[v]){ if (d[i] == -1){ d[i] = d[v] + 1; q.push(i); } } } int ans = dia(G) + 1; for (int i = 0; i < N; i++){ ans = max(ans, d[i] * (int) G[i].size() + 1); } cout << ans << endl; }