#include <bits/stdc++.h>
using namespace std;
bool line[20][20];
unsigned long long dp[1 << 19][20];
int fh[1 << 19];
int f(int i) { return 1 << (i - 1); }
int main() {
  int n, m;
  int u, v;
  unsigned long long ans = 0;
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    cin >> u >> v;
    line[u][v] = line[v][u] = true;
  }
  for (int i = 1; i <= n; i++) {
    fh[f(i)] = i;
  }
  for (int i = 1; i <= (1 << n) - 1; i++) {
    for (int t = fh[i & (-i)] + 1; t <= n; t++) {
      if (f(t) & i) {
        int s = fh[i & (-i)];
        int sta = i - f(s) - f(t);
        if (!sta) {
          if (line[s][t]) dp[i][t] = 1;
          continue;
        }
        for (int j = sta; j; j -= (j & (-j))) {
          if (line[fh[j & (-j)]][t]) dp[i][t] += dp[i - f(t)][fh[j & (-j)]];
        }
        if (line[s][t]) ans += dp[i][t];
      }
    }
  }
  cout << ans / 2 << endl;
  return 0;
}
