#include <bits/stdc++.h>
using namespace std;
long long dp[1 << 19][19];
int pos[1 << 19];
bool g[19][19];
int n, m;
int main() {
  scanf("%d%d", &n, &m);
  int x, y;
  for (int i = 1; i <= m; ++i) {
    scanf("%d%d", &x, &y);
    --x;
    --y;
    g[x][y] = g[y][x] = true;
  }
  long long ans = 0;
  for (int i = 0; i < n; ++i) dp[1 << i][i] = 1;
  for (int s = 1; s < (1 << n); ++s) {
    int beg = 0;
    for (int i = 0; i < n; ++i)
      if ((s >> i) & 1) {
        beg = i;
        break;
      }
    for (int end = beg; end < n; ++end)
      if ((s >> end) & 1) {
        for (int i = beg; i < n; ++i)
          if (!((s >> i) & 1) && g[end][i]) {
            dp[s | (1 << i)][i] += dp[s][end];
          }
        if (g[beg][end] && __builtin_popcount(s) >= 3) ans += dp[s][end];
      }
  }
  cout << ans / 2 << endl;
  return 0;
}
