/*
TASK:tri
LANG:C++
*/
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;

vector<int> a[512];
int vis[512];
int pred[512];
int br;

void dfs(int n)
{
    queue<int> dat;
    dat.push(n);
    vis[n]++;
    int vrh, sz, i, j, nv;
    while(!dat.empty())
    {
        vrh=dat.front();
        dat.pop();
        sz=a[vrh].size();
        for(i=0; i<sz; i++)
        {
            nv=a[vrh][i];
            for(j=0; j<sz; j++)
                if(find(a[nv].begin(),a[nv].end(),a[vrh][j])!=a[nv].end())br++;
            if( vis[ nv ] ) continue;
            dat.push(nv);
            pred[nv]=vrh;
            vis[nv]++;
        }
    }
}

int main()
{
    int n, q,w;
    scanf("%d", &n);
    for(int i=1; i<=n; i++) pred[i]=500+i;
    scanf("%d%d", &q, &w);
    while(q)
    {
        a[q].push_back(w);
        a[w].push_back(q);
        scanf("%d%d", &q, &w);
    }
    dfs(1);
    printf("%d\n", br/6);
    return 0;
}
