#include <bits/stdc++.h>
using namespace std;
long long int n, m, dp[(1 << (int)(20)) + 5][(int)(20) + 5], st, ans,
    ed[(int)(20)][(int)(20)];
long long int dfs(int mask, int cur) {
  if (~dp[mask][cur]) return dp[mask][cur];
  dp[mask][cur] = 0;
  if (__builtin_popcount(mask) > 2 && ed[cur][st]) dp[mask][cur]++;
  for (int i = st + 1; i <= n; i++)
    if (((mask & (1 << (i - 1))) == 0) && ed[cur][i])
      dp[mask][cur] += dfs(mask + (1 << (i - 1)), i);
  return dp[mask][cur];
}
int main() {
  memset(dp, -1, sizeof(dp));
  scanf("%lld %lld", &n, &m);
  for (int i = 1; i <= m; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    ed[u][v] = ed[v][u] = 1;
  }
  for (int i = 1; i <= n; i++) {
    st = i;
    ans += dfs(1 << (i - 1), i);
  }
  printf("%lld\n", ans / 2);
}
