#include <bits/stdc++.h>
using namespace std;
using namespace std;
int g[19][19], lw[1 << 19];
long long dp[1 << 19][19], ans = 0;
int main() {
  int n, m, t1, t2;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &t1, &t2);
    --t1;
    --t2;
    g[t1][t2] = 1;
    g[t2][t1] = 1;
  }
  for (int i = 0; i < (1 << n); i++) lw[i] = log2(i & (-i));
  for (int i = 0; i < n; i++) dp[1 << i][i] = 1;
  for (int msk = 0; msk < (1 << n); msk++)
    for (int i = 0; i < n; i++)
      if (dp[msk][i])
        for (int j = lw[msk] + 1; j < n; j++)
          if (g[i][j] && !(msk & (1 << j))) dp[msk | (1 << j)][j] += dp[msk][i];
  for (int msk = 0; msk < (1 << n); msk++)
    if (__builtin_popcount(msk) >= 3)
      for (int i = 0; i < n; i++)
        if (g[lw[msk]][i]) ans += dp[msk][i];
  printf("%lld\n", ans / 2);
  return 0;
}
