#include <bits/stdc++.h>
using namespace std;
long long dp[524288][19], ans;
int n, m;
vector<int> g[19];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--, b--;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  for (int i = 0; i < n; i++) dp[1 << i][i] = 1;
  for (int i = 0; i < (1 << n); i++)
    for (int j = 0; j < n; j++)
      for (int k = 0; k < g[j].size(); k++)
        if ((i & (-i)) <= (1 << g[j][k]))
          if ((1 << g[j][k]) & i) {
            if ((i & (-i)) == (1 << g[j][k])) ans += dp[i][j];
          } else
            dp[i | (1 << g[j][k])][g[j][k]] += dp[i][j];
  printf("%lld", (ans - m) / 2);
  return 0;
}
