#include <bits/stdc++.h>
using namespace std;
bool edge[20][20];
int n, m;
long long dp[(1 << 19) + 5][20];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    edge[a][b] = 1;
    edge[b][a] = 1;
  }
  for (int i = 0; i < n; i++) dp[1 << i][i] = 1;
  long long ans = 0;
  int limit = 1 << n;
  for (int mask = 1; mask < limit; mask++) {
    int first = 0;
    while ((mask & (1 << first)) == 0) first++;
    for (int i = 0; i < n; i++) {
      if (dp[mask][i]) {
        if (edge[i][first] && i != first && mask != ((1 << i) | (1 << first)))
          ans += dp[mask][i];
        for (int j = first + 1; j < n; j++) {
          if ((mask & (1 << j)) == 0 && edge[i][j]) {
            dp[mask | (1 << j)][j] += dp[mask][i];
          }
        }
      }
    }
  }
  cout << ans / 2;
  return 0;
}
