Cod sursa(job #190672)
#include <stdio.h>
#define Nmax 4000
#define Mmax 60800
#define IN "triplete.in"
#define OUT "triplete.out"
short int nod[Nmax],xx[Mmax],yy[Mmax];
int nr,nrm,n,m;
unsigned char a[Nmax][Nmax/7];
void proba()
{
for(int i=0;i<n;++i){
for(int j=0;j<=n/8;++j)
for(int k=0;k<8;++k)
printf("%d ",a[i][j]&(1<<k));
printf("\n");
}
printf("\n");
}
void scan()
{
int x,y;
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
scanf("%d%d", &n,&m);
for(int i=1;i<=m;++i)
{
scanf("%d%d", &x,&y);
--x;
--y;
++nod[x];
++nod[y];
xx[++nr]=x;
yy[nr]=y;
//a[x][ (y>>3) + (y&7) ]=a[y][ (x>>3) + (x&7) ]=1;
a[x][y/8] |= 1<<(y%8);
a[y][x/8] |= 1<<(x%8);
}
//proba();
}
void solve()
{
int x,rez=0;
/*
for(int i=1;i<=m;++i)
for(int k=1;k<=n;++k)
if(a[ xx[i] ][ (k>>3) + (k&7) ] && a[ yy[i] ][ (k>>3) + (k&7) ])
++rez;
*/
for(int i=1;i<=m;++i)
for(int k=0;k<=n/8;++k)
{
x=a[xx[i]][k] & a[yy[i]][k];
while(x)
{
++rez;
x&=(x-1);
}
}
printf("%d", rez/3);
}
int main()
{
scan();
solve();
return 0;
}