#include <bits/stdc++.h>
using namespace std;
vector<int> adj(19, 0);
long long int dp[1 << 19][19] = {}, ans = 0;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int i, j, n, m;
  cin >> n >> m;
  while (m--) {
    cin >> i >> j;
    i--;
    j--;
    adj[i] |= (1 << j);
    adj[j] |= (1 << i);
  }
  for (i = 0; i < n; i++) {
    dp[1 << i][i] = 1;
  }
  for (int mask = 1; mask < (1 << n); mask++) {
    int fmask = mask & (-mask);
    int lmask = mask & (mask - 1);
    if (!lmask) continue;
    if (!(lmask & (lmask - 1))) {
      int last = __builtin_ctz(mask & (mask - 1));
      dp[mask][last] = (adj[last] & (mask ^ (1 << last))) ? 1 : 0;
      continue;
    }
    for (int lgmask = lmask; lgmask; lgmask &= (lgmask - 1)) {
      int last = __builtin_ctz(lgmask & (-lgmask));
      for (int slmask = lmask ^ (1 << last); slmask; slmask &= (slmask - 1))
        if (adj[last] & (slmask & (-slmask)))
          dp[mask][last] +=
              dp[mask ^ (1 << last)][__builtin_ctz(slmask & (-slmask))];
      if (dp[mask][last] && (adj[last] & fmask)) ans += dp[mask][last];
    }
  }
  ans /= 2;
  cout << ans;
}
