#include <bits/stdc++.h>
using namespace std;
const int N = 19;
int bit[1 << N], g[N], n, m;
long long dp[1 << N][N], ans;
int main() {
  cin >> n >> m;
  for (int i = 0, u, v; i < m; i++) {
    cin >> u >> v;
    u--, v--;
    g[u] |= (1 << v), g[v] |= (1 << u);
  }
  for (int i = 0; i < n; i++) bit[1 << i] = i, dp[1 << i][i] = 1;
  for (int i = 0; i < (1 << n); i++) {
    int from = bit[i & -i], to, node;
    for (int j = i; j; j ^= j & -j) {
      to = bit[j & -j];
      for (int k = g[to]; k; k ^= k & -k) {
        node = bit[k & -k];
        if (node < from) continue;
        if (k & -k & i) {
          if (node == from) ans += dp[i][to];
        } else
          dp[i ^ (k & -k)][node] += dp[i][to];
      }
    }
  }
  ans = (ans - m) >> 1;
  cout << ans << endl;
}
