#include <bits/stdc++.h>
using namespace std;
long long dp[1 << 19][19];
bool exist[19][19];
long long mn;
signed main() {
  long long n, m;
  cin >> n >> m;
  for (long long i = 0; i < m; i++) {
    long long f, t;
    cin >> f >> t, f--, t--;
    exist[f][t] = 1;
    exist[t][f] = 1;
  }
  long long ans = 0;
  for (long long i = 0; i < n; i++) dp[1 << i][i] = 1;
  for (long long mask = 1; mask < (1 << n); mask++) {
    for (mn = 0; mn < n; mn++) {
      if ((1 << mn) & mask) break;
    }
    for (long long last = mn; last < n; last++) {
      if (((1 << last) & mask) == 0) continue;
      if (last != mn && exist[last][mn] && (1 << last) + (1 << mn) != mask)
        ans += dp[mask][last];
      for (long long j = mn + 1; j < n; j++) {
        if ((1 << j) & mask) continue;
        if (exist[last][j]) {
          dp[mask ^ (1 << j)][j] += dp[mask][last];
        }
      }
    }
  }
  cout << ans / 2 << endl;
}
