#include <bits/stdc++.h>
using namespace std;
void da(int *a, int s, int e) {
  for (int i = s; i < e; i++) cout << a[i] << " ";
}
void db(string s) { cout << s << '\n'; }
void cp(int *a, int *b, int n) {
  for (int i = 0; i < n; i++) b[i] = a[i];
}
const int N = 20, sn = 250, LOG = 19, MOD = 1e9 + 7;
long long n, m, dp[1 << N][N];
bool im[N][N];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  int u, v;
  for (int i = 0; i < m; i++) {
    cin >> u >> v;
    v--, u--;
    im[u][v] = im[v][u] = 1;
  }
  long long sum = 0;
  for (int i = 0; i < n; i++) dp[1 << i][i] = 1;
  for (int mask = 1; mask < 1 << n; mask++) {
    for (int j = 0; j < n; j++) {
      if (!(mask >> j & 1) || __builtin_ctz(mask) == j) continue;
      for (int h = 0; h < n; h++)
        if (mask >> h & 1 && im[j][h]) dp[mask][j] += dp[mask ^ (1 << j)][h];
      if (im[j][__builtin_ctz(mask)]) sum += dp[mask][j];
    }
  }
  cout << (sum - m) / 2;
}
