#include <bits/stdc++.h>
using namespace std;
int s, gr[20][20], n;
long long dp[1 << 19][20];
long long f(int bt, int a, int k) {
  if (dp[bt][a] != -1) return dp[bt][a];
  long long ans = 0;
  for (int i = s; i < n; i++)
    if (gr[i][a] && !(bt & (1 << i)))
      ans += f(bt | (1 << i), i, k + 1);
    else if (gr[i][a] && i == s && k > 1)
      ans++;
  return dp[bt][a] = ans;
}
int main() {
  int m, a, b;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> a >> b;
    gr[a - 1][b - 1] = gr[b - 1][a - 1] = 1;
  }
  long long slv = 0;
  memset(dp, -1, sizeof dp);
  for (int i = 0; i < n; i++) {
    s = i;
    slv += f(1 << i, i, 0) / 2;
  }
  cout << slv << endl;
}
