#include <bits/stdc++.h>
using namespace std;
long long n, m, mem[19][1 << 19];
bool f[21][21];
long long run(int start, int at, int been, int cnt) {
  long long &res = mem[at][been];
  if (res == -1) {
    res = 0;
    if (cnt >= 3 && f[at][start]) ++res;
    for (int to = start + 1; to < n; to++) {
      if (!f[at][to]) continue;
      if ((been & (1 << to)) != 0) continue;
      res += run(start, to, been | (1 << to), cnt + 1);
    }
  }
  return res;
}
int main() {
  scanf("%d%d", &n, &m);
  memset(f, false, sizeof(f));
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    --a, --b;
    f[a][b] = f[b][a] = true;
  }
  long long res = 0;
  for (int i = 0; i < n; i++) {
    memset(mem, -1, sizeof(mem));
    res += run(i, i, 1 << i, 1);
  }
  cout << res / 2 << endl;
  return 0;
}
