package main import "fmt" func checkSquare(edge [][]bool, i, j, k, l int) bool { return edge[i][j] && edge[j][k] && edge[k][l] && edge[l][i] && !edge[i][k] && !edge[j][l] } func main() { var N int var M int fmt.Scan(&N, &M) edge := make([][]bool, N) for i := 0; i < N; i++ { edge[i] = make([]bool, N) } for i := 0; i < M; i++ { var a, b int fmt.Scan(&a, &b) edge[a][b] = true edge[b][a] = true } count := 0 for i := 0; i < N; i++ { for j := i + 1; j < N; j++ { for k := j + 1; k < N; k++ { for l := k + 1; l < N; l++ { if checkSquare(edge, i, j, k, l) { count++ } if checkSquare(edge, i, k, l, j) { count++ } if checkSquare(edge, i, l, j, k) { count++ } // それ以外の並び替えは 同じ意味を持つためカウントしない //if checkSquare(edge,i,j,l,k){ // count++ //} } } } } fmt.Println(count) }