#include <bits/stdc++.h>
using namespace std;
long long dp[20][1 << 19];
int mat[20][20];
int n, start;
int check_bit(int mask) {
  int cnt = 0;
  for (int i = 0; i < n; i++)
    if (!((mask >> i) & 1)) cnt++;
  return cnt;
}
long long rec(int last, int mask) {
  long long &ret = dp[last][mask];
  if (ret != -1) return ret;
  ret = 0;
  if (mat[last][start] && check_bit(mask) >= 3) ret = 1;
  for (int i = start + 1; i < n; i++) {
    if (mat[last][i] && ((mask >> i) & 1)) ret += rec(i, mask ^ (1 << i));
  }
  return ret;
}
int main() {
  int m, u, v;
  while (scanf(" %d %d", &n, &m) == 2) {
    memset(dp, -1, sizeof(dp));
    memset(mat, 0, sizeof(mat));
    for (int i = 0; i < m; i++) {
      scanf(" %d %d", &u, &v);
      mat[u - 1][v - 1] = mat[v - 1][u - 1] = 1;
    }
    long long ans = 0;
    for (int i = 0; i < n; i++) {
      start = i;
      ans += (rec(i, ((1 << n) - 1) ^ (1 << i)) / 2);
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
