#include <bits/stdc++.h>
using namespace std;
const int N = 600010;
int ci[35], n, m;
bool v[35][35];
long long ans, f[N][20];
void solve() {
  for (int i = 0; i <= n - 1; i++) f[ci[i]][i] = 1;
  for (int S = 1; S <= ci[n] - 1; S++) {
    int now = S & -S;
    for (int i = 0; i <= n - 1; i++)
      if (ci[i] == now) {
        now = i;
        break;
      }
    for (int i = 0; i <= n - 1; i++)
      if (f[S][i]) {
        if (v[now][i]) ans += f[S][i];
        for (int j = now + 1; j <= n - 1; j++)
          if (!(ci[j] & S) && v[i][j]) f[S | ci[j]][j] += f[S][i];
      }
  }
  ans = (ans - m) >> 1;
}
signed main() {
  ci[0] = 1;
  for (int i = 1; i <= 20; i++) ci[i] = ci[i - 1] << 1;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--;
    b--;
    v[a][b] = v[b][a] = 1;
  }
  solve();
  printf("%lld\n", ans);
  return 0;
}
