#include <iostream>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <unordered_set>
#include <stdio.h>
#include <string.h>
#include <unordered_map>
#include <fstream>
#include <set>
#include <map>
#define MOD 1000000007
#define ll long long
#define N 20000
#define float double
using namespace std;
vector<int> vl[4001];
void dfs(int node, ll* maar, int* k, int dist){
k[node]=1;
maar[dist]++;
for(int seur:vl[node])
if(!k[seur])
dfs(seur, maar, k, dist+1);
}
int main(){
int n;
for(int i=0; i<n; i++){
int a,b;
cin>>a>>b;
vl[a].push_back(b);
vl[b].push_back(a);
}
ll vast=0;
for(int i=1; i<=n; i++){
ll maar[4000];
int k[4000];
for(int i=0; i<4000; i++){
k[i]=0;
maar[i]=0;
}
for(int e=1; e<4000; e++)
if(maar[e]>=3)
vast+=((maar[e])(maar[e]-1)(maar[e]-2))/6;
}
cout<<vast<<endl;
return 0;
}