#include <bits/stdc++.h>   using namespace std;   int n;   vector<pair<int, int> > edges;   vector<int> conn[201];   bool v1[201], v2[201];   int mx = 0;   void setEdge(int a, int b, int v) {     for (int s = 0; s < conn[a].size(); s++) {       if (conn[a][s] == b || conn[a][s] == -1) conn[a][s] = (v == 1 ? b : -1);     }     for (int s = 0; s < conn[b].size(); s++) {       if (conn[b][s] == a || conn[b][s] == -1) conn[b][s] = (v == 1 ? a : -1);     }   }   int getHeight(int i) {     v2[i] = 1;     int ret = 0;     for (int j = 0; j < conn[i].size(); j++) {       if (conn[i][j] != -1 && !v2[conn[i][j]]) {         ret = max(ret, 1 + getHeight(conn[i][j]));       }     }     v2[i] = 0;     return ret;   }   int longestPath(int i) {     v1[i] = 1;     int ret = 0;     int cnt = 0;     for (int j = 0; j < conn[i].size(); j++) {       if (conn[i][j] != -1 && !v1[conn[i][j]]) {         ret = max(ret, longestPath(conn[i][j]));         cnt++;       }     }     if (cnt == 0) ret = max(ret, getHeight(i));     v1[i] = 0;     return ret;   }   int main() {     cin >> n;     memset(v1, 0, sizeof v1);     memset(v2, 0, sizeof v2);     int a, b;     for (int i = 0; i < n - 1; i++) {       cin >> a >> b;       edges.push_back(make_pair(a - 1, b - 1));       conn[a - 1].push_back(b - 1);       conn[b - 1].push_back(a - 1);     }     for (int i = 0; i < edges.size(); i++) {       a = edges[i].first;       b = edges[i].second;       setEdge(a, b, 0);       mx = max(mx, longestPath(a) * longestPath(b));       setEdge(a, b, 1);     }     cout << mx << endl;   }   