#include <bits/stdc++.h>
using namespace std;
const int N = 1000 * 100 * 6 + 10;
const long long int mod = 1e9 + 7;
const long long int inf = 1e18;
long long int dp[N][40];
vector<int> adj[N];
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    x--;
    y--;
    adj[y].push_back(x);
    adj[x].push_back(y);
  }
  int p = 1 << n;
  for (int mask = 1; mask < p; mask++) {
    int u = __builtin_ctz(mask), b = __builtin_popcount(mask);
    if (b == 1) {
      dp[mask][u] = 1;
      continue;
    }
    for (int j = u + 1; j < n; j++) {
      if ((mask >> j) & 1) {
        int mask2 = mask ^ (1 << j);
        for (auto x : adj[j]) {
          if ((mask >> x) & 1) dp[mask][j] += dp[mask2][x];
        }
      }
    }
  }
  long long int ans = 0;
  for (int mask = 1; mask < p; mask++) {
    int u = __builtin_ctz(mask), b = __builtin_popcount(mask);
    if (b <= 2) continue;
    for (auto x : adj[u]) {
      if ((mask >> x) & 1) ans += dp[mask][x];
    }
  }
  cout << ans / 2 << endl;
  return 0;
}
