#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const double eps = 0;
const int ms = 0;
const int md = 0;
int n, m;
long long dp[19][1 << 19];
bool a[19][19];
int cnt(int nbit) { return __builtin_popcount(nbit); }
long long bitcycle(int mask, int id, int start) {
  long long ans = 0;
  if (dp[id][mask] != -1) return dp[id][mask];
  if (cnt(mask) > 2 && a[id][start]) ans += 1;
  for (__typeof(start + 1) i = start + 1; i < n; i++) {
    if (!(mask & (1 << i)) && a[i][id]) {
      ans += bitcycle(mask | (1 << i), i, start);
    }
  }
  dp[id][mask] = ans;
  return ans;
}
int main() {
  memset(dp, -1, sizeof(dp));
  memset(a, 0, sizeof(a));
  cin >> n >> m;
  for (__typeof(0) i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    --x, --y;
    a[x][y] = 1;
    a[y][x] = 1;
  }
  long long ans = 0;
  int mask = 0;
  for (__typeof(0) i = 0; i < n; i++) {
    if (!(mask & (1 << i))) ans += bitcycle(mask | (1 << i), i, i);
  }
  cout << ans / 2 << endl;
  return 0;
}
