#include <bits/stdc++.h>
using namespace std;
bool a[20][20];
long long f[600001][20], n, m;
long long ans = 0;
long long lowbit(long long x) { return x & (-x); }
int main() {
  scanf("%I64d %I64d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    a[x - 1][y - 1] = true;
    a[y - 1][x - 1] = true;
  }
  int t = 1 << n;
  for (int i = 0; i < n; i++) f[1 << i][i] = 1;
  for (int i = 1; i <= t; i++) {
    for (int j = 0; j < n; j++) {
      if (!f[i][j]) continue;
      for (int k = 0; k < n; k++) {
        if (a[j][k] && (lowbit(i) <= (1 << k))) {
          if ((1 << k) & i) {
            if (lowbit(i) == (1 << k)) ans += f[i][j];
          } else
            f[i | (1 << k)][k] += f[i][j];
        }
      }
    }
  }
  printf("%I64d", (ans - m) / 2);
}
