1 #include<iostream>
2 using namespace std;
3 void DFS(int**mat, int *mark,int *sp, int n, int p)
4 {
5 int i;
6 //DFS每个顶点
7 if(!mark[p])
8 for(i=1;i<=n;i++)
9 if (mat[p][i]&&i!=p)//<p,i>
10 {
11 mark[p] = 1;
12 sp[p] = 1;
13 DFS(mat,mark,sp, n, i);
14 mark[p] = 0;
15 }
16 }
17 int main()
18 {
19 int n, m,i,j; cin >> n >> m;
20 int**mat = new int*[n+1];
21 for (i = 0; i <= n; i++)
22 mat[i] = new int[n+1];
23 for (i = 0; i <= n; i++)
24 for (j = 0; j <= n; j++)
25 mat[i][j] = 0;
26 int a, b;
27 for (i = 0; i < m; i++)
28 {
29 cin >> a >> b;
30 mat[a][b] = 1;
31 }
32 int *mark = new int[n + 1];
33 int *sp = new int[n + 1];
34 int sum = 0,k;
35 for (i = 1; i <= n; i++)
36 mark[i] = 0;
37 for (i = 1; i < n; i++)
38 {
39 for (k = 1; k <= n; k++)
40 sp[k] = 0;
41 DFS(mat, mark, sp, n, i);
42 for (j = i + 1; j <= n; j++)
43 {
44 if (sp[j])//<i,j>
45 {
46 for (k = 1; k <= n; k++)
47 sp[k] = 0;
48 DFS(mat, mark, sp, n, j);
49 if (sp[i])//<j,i>
50 sum++;
51 }
52 }
53 }
54 cout << sum << endl;
55 return 0;
56 }