#include <bits/stdc++.h>
using namespace std;
long long n, m, dp[1 << 19][21], a[22][22], ans;
long long lowbit(long long x) { return (x & (-x)); }
int main() {
  memset(a, 0, sizeof(a));
  memset(dp, 0, sizeof(dp));
  scanf("%lld%lld", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    a[x - 1][y - 1] = a[y - 1][x - 1] = 1;
  }
  for (int i = 0; i <= n; i++) dp[1 << i][i] = 1;
  for (int mask = 1; mask < (1 << n); mask++) {
    for (int ed = 0; ed < n; ed++) {
      if (!dp[mask][ed]) continue;
      for (int nxt = 0; nxt < n; nxt++) {
        if (!a[ed][nxt]) continue;
        if (lowbit(mask) > (1 << nxt)) continue;
        if (mask & (1 << nxt)) {
          if ((lowbit(mask)) == (1 << nxt)) ans += dp[mask][ed];
        } else
          dp[(mask | (1 << nxt))][nxt] += dp[mask][ed];
      }
    }
  }
  printf("%lld", (ans - m) / 2);
  return 0;
}
