#include <bits/stdc++.h>
using namespace std;
long long dp[19][524288], t[524288];
int edge[19][19];
int main() {
  int n, m, x, y;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < m; i++) {
    scanf("%d %d", &x, &y);
    edge[x - 1][y - 1] = 1;
    edge[y - 1][x - 1] = 1;
  }
  long long ans = 0;
  for (int i = 1; i < (1 << n); i++) {
    int start = 0, count = 0;
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) {
        start = j;
        count++;
      }
    }
    if (count == 1) {
      dp[start][i] = 1;
      continue;
    }
    for (int j = 0; j <= start; j++) {
      for (int k = 0; k < start; k++) {
        if (!edge[j][k]) continue;
        if ((i & (1 << j)) == 0) continue;
        if ((i & (1 << k)) == 0) continue;
        dp[k][i] += dp[j][i ^ (1 << k)];
      }
    }
    if (count >= 3) {
      for (int j = 0; j < start; j++) {
        if (edge[start][j]) {
          ans += dp[j][i];
        }
      }
    }
  }
  printf("%I64d\n", ans / 2);
  return 0;
}
