#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1E-9;
const int INF = (int)1E9;
const long long INF64 = (long long)1E18;
const long double PI = 2 * acos(.0);
long long ans = 0;
int n, m;
long long d[1 << 20][20];
bool g[20][20];
int main() {
  cin >> n >> m;
  for (int i = 0; i < (int)(m); i++) {
    int v, u;
    cin >> v >> u;
    g[v - 1][u - 1] = g[u - 1][v - 1] = true;
  }
  for (int i = 0; i < (int)(n); i++) d[1 << i][i] = 1;
  for (int mask = 0; mask < (int)(1 << n); mask++) {
    if (mask == 0) continue;
    int f = -1, num = 0;
    for (int i = 0; i < (int)(n); i++)
      if ((mask & (1 << i)) != 0) {
        if (f == -1) f = i;
        num++;
      }
    for (int last = f; last < n; last++) {
      if (d[mask][last] == 0 || ((mask & (1 << last)) == 0)) continue;
      if (g[f][last] && num > 2) ans += d[mask][last];
      for (int next = f; next < n; next++)
        if (g[last][next] && ((mask & (1 << next)) == 0))
          d[mask | (1 << next)][next] += d[mask][last];
    }
  }
  cout << ans / 2 << endl;
  return 0;
}
