#include <bits/stdc++.h>
using namespace std;
const int MaxN = 19, MaxL = 1 << MaxN, MaxC = 0x3F3F3F3F, NA = -1;
bool a[MaxN][MaxN];
long long f[MaxL][MaxN];
int m, n;
int main(void) {
  int i, j, k, l;
  long long res;
  while (scanf(" %d %d", &n, &m) != EOF) {
    memset(a, 0, sizeof(a));
    for (i = 0; i < m; i++) {
      scanf(" %d %d", &j, &k);
      j--;
      k--;
      a[j][k] = a[k][j] = true;
    }
    m = 1 << n;
    res = 0;
    for (l = 0; l < n; l++) {
      memset(f, 0, sizeof(f));
      f[1 << l][l] = 1;
      for (i = 0; i < m; i++)
        for (j = l; j < n; j++)
          if (f[i][j]) {
            if (a[j][l] && __builtin_popcount(i) > 2) res += f[i][j];
            for (k = l + 1; k < n; k++)
              if (!((i >> k) & 1) && a[j][k]) f[i | (1 << k)][k] += f[i][j];
          }
    }
    printf(
        "%lld"
        "\n",
        res >> 1);
  }
  return 0;
}
