#include using namespace std; typedef unsigned int uint; typedef long long int ll; typedef unsigned long long int ull; #define debugv(v) printf("L%d %s => ",__LINE__,#v);for(auto e:v){cout< ",__LINE__,#m);for(int x=0;x<(w);x++){cout<<(m)[x]<<" ";}cout<>= 1, k++)s = (s << 1) | (u & 1); for (; 0>= 1)cout << (s & 1); } } #define TIME chrono::system_clock::now() #define MILLISEC(t) (chrono::duration_cast(t).count()) namespace { std::chrono::system_clock::time_point t; void tic() { t = TIME; } void toc() { fprintf(stderr, "TIME : %lldms\n", MILLISEC(TIME - t)); } std::chrono::system_clock::time_point tle = TIME; void safe_tle(int msec) { assert(MILLISEC(TIME - tle) < msec); } } template ostream& operator <<(ostream &o, const pair p) { o << "(" << p.first << ":" << p.second << ")"; return o; } int width, height; int m, n; int g[60][60]; int main() { int i, j, k, l; int x, y, a, b; cin >> n >> m; for (i = 0; i < m; ++i) { cin >> a >> b; g[b][a] = g[a][b] = 1; } int cnt = 0; for (i = 0; i < n - 3; i++) { for (j = i + 1; j < n - 2; j++) { for (k = j + 1; k < n - 1; k++) { for (l = k + 1; l < n; l++) { if (g[i][j] && g[j][k] && g[k][l] && g[l][i] && !g[i][k] && !g[j][l]) { ++cnt; } else if (g[i][k] && g[k][j] && g[j][l] && g[l][i] && !g[i][j] && !g[k][l]) { ++cnt; } else if (g[i][k] && g[k][l] && g[l][j] && g[j][i] && !g[i][l] && !g[k][j]) { ++cnt; } } } } } cout << cnt << endl; return 0; }