#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1 << 20;
int adj[20][20];
long long dp[MAX_N][20], ans;
int n, m;
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int v, u;
    cin >> v >> u;
    --v;
    --u;
    adj[u][v] = adj[v][u] = 1;
  }
  for (int mask = 0; mask < (1 << n); mask++) {
    int oneBits = __builtin_popcount(mask), firstBit = -1, x = mask, Cnt = 0;
    while (x > 0 && firstBit == -1) {
      if (x % 2) firstBit = Cnt;
      x /= 2;
      ++Cnt;
    }
    if (oneBits == 1) dp[mask][firstBit] = 1;
    for (int i = firstBit; i < n; i++)
      for (int j = firstBit + 1; j < n; j++)
        if (adj[i][j] && !(mask & (1 << j)))
          dp[mask ^ (1 << j)][j] += dp[mask][i];
    for (int i = 0; i < n; i++)
      if (oneBits >= 3 && adj[firstBit][i]) ans += dp[mask][i];
  }
  cout << ans / 2 << endl;
  return 0;
}
