#include <bits/stdc++.h>
using namespace std;
int g[20][20];
int N, M;
long long mem[20][1 << 20];
long long start(int first, int last, int cnt, int mask) {
  long long& res = mem[last][mask];
  if (res != -1) return res;
  res = 0;
  if (cnt >= 3 && g[last][first]) {
    res++;
  }
  for (int i = first + 1; i < N; i++) {
    if (g[last][i] && (!(mask & (1 << i)))) {
      res += start(first, i, cnt + 1, mask | (1 << i));
    }
  }
  return res;
}
int main(int argc, char* argv[]) {
  scanf("%d %d", &N, &M);
  for (int i = 0; i < M; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    u--, v--;
    g[u][v] = g[v][u] = 1;
  }
  memset(mem, -1, sizeof(mem));
  long long res = 0;
  for (int i = 0; i < N; i++) {
    res += start(i, i, 1, 1 << i);
  }
  res /= 2;
  cout << res << endl;
  return 0;
}
