#include<bits/stdc++.h>
using namespace std;
struct node
{
int to , nxt , w;
}e[410];
int n , tot = 0 , head[410] , u[410] , v[410];
long long dp[410];
void add(int u , int v , int w)
{
++ tot;
e[tot].to = v;
e[tot].nxt = head[u];
e[tot].w = w;
head[u] = tot;
}
long long dfs(int u , int fa)
{
long long qwq = 0;
dp[u] = 0;
for(int i = head[u] ; i != 0 ; i = e[i].nxt)
{
int v = e[i].to;
if(v == fa) continue;
dfs(v , u);
qwq = max(qwq , dp[u] + dp[v] + e[i].w);
dp[u] = max(dp[u] , dp[v] + e[i].w);
}
return qwq;
}
int main()
{
scanf("%d" , &n);
for(int i = 1 ; i < n ; i ++)
{
scanf("%d%d" , &u[i] , &v[i]);
add(u[i] , v[i] , 1) , add(v[i] , u[i] , 1);
}
long long output = 0;
for(int i = 1 ; i < n ; i ++)
{
long long ans = 1;
ans *= 1ll * dfs(u[i] , v[i]) * dfs(v[i] , u[i]);
output = max(output , ans);
}
printf("%lld\n" , output);
return 0;
}