#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> p[100100];
long long sz[100100];
long long dp[100100];
long long res = 0;
void dfs(int x, int pp = -1) {
  for (int i = 0; i < p[x].size(); i++) {
    if (p[x][i] == pp) continue;
    dfs(p[x][i], x);
    sz[x] += sz[p[x][i]];
    dp[x] += dp[p[x][i]];
    res += dp[p[x][i]];
  }
  sz[x]++;
  for (int i = 0; i < p[x].size(); i++) {
    if (p[x][i] == pp) continue;
    dp[x] += (sz[p[x][i]] * (sz[p[x][i]] - 1) / 2) * (sz[x] - sz[p[x][i]]);
  }
}
void cal(int x, int pp = -1, long long sz1 = 0, long long dp1 = 0) {
  long long sz2 = 0, dp2 = 0, r = 0, r1 = 0;
  res += dp1;
  for (int i = 0; i < p[x].size(); i++) {
    if (p[x][i] == pp) continue;
    sz2 += sz[p[x][i]];
    dp2 += dp[p[x][i]];
    r += sz[p[x][i]] * (sz[p[x][i]] - 1) / 2;
  }
  for (int i = 0; i < p[x].size(); i++) {
    if (p[x][i] == pp) continue;
    r1 += (sz[p[x][i]] * (sz[p[x][i]] - 1) / 2) * (sz1 + sz2 - sz[p[x][i]] + 1);
  }
  r += sz1 * (sz1 - 1) / 2;
  r1 += sz1 * (sz1 - 1) / 2 * (sz2 + 1);
  for (int i = 0; i < p[x].size(); i++) {
    if (p[x][i] == pp) continue;
    cal(p[x][i], x, sz1 + sz2 + 1 - sz[p[x][i]],
        dp1 + dp2 - dp[p[x][i]] + r1 -
            (sz[p[x][i]] * (sz[p[x][i]] - 1) / 2) *
                (sz1 + sz2 - sz[p[x][i]] + 1) -
            (r - sz[p[x][i]] * (sz[p[x][i]] - 1) / 2) * sz[p[x][i]]);
  }
  for (int i = 0; i < p[x].size(); i++) {
    if (p[x][i] == pp) continue;
    res += sz[p[x][i]] * (r - sz[p[x][i]] * (sz[p[x][i]] - 1) / 2);
  }
  r -= sz1 * (sz1 - 1) / 2;
  res += sz1 * r;
}
int main() {
  cin >> n;
  int x, y;
  for (int i = 0; i < n - 1; i++) {
    scanf("%d%d", &x, &y);
    p[x].push_back(y);
    p[y].push_back(x);
  }
  dfs(1);
  cal(1);
  res /= 2;
  cout << res << endl;
  return 0;
}
