import sys sys.setrecursionlimit(int(1e7)) N = int(input()) G = [[] for _ in range(N)] for _ in range(N - 1): u, v = map(int, input().split()) u, v = u - 1, v - 1 G[u].append(v) G[v].append(u) dist = [0] * N def dfs1(u, par): for v in G[u]: if v == par: continue dfs1(v, u) dist[u] = max(dist[u], dist[v] + 1) def dfs2(u, d_par, par): far = [(0, -1)] for v in G[u]: if v == par: far.append((d_par + 1, v)) else: far.append((dist[v] + 1, v)) far.sort(reverse=True) ans, size = 0, len(far) for i in range(size): c, _ = far[i] ans = max(ans, 1 + (i + 1) * c) for v in G[u]: if v == par: continue ans = max(ans, dfs2(v, far[int(far[0][1] == v)][0], u)) return ans dfs1(0, -1) print(dfs2(0, 0, -1))