#include <bits/stdc++.h>
using namespace std;
const long long N = 20, B = (1 << 19) + 5;
long long n, m, mp[N][N], f[B][N], re = 0;
signed main() {
  long long z, i, s, t, x, y;
  scanf("%lld%lld", &n, &m);
  for (i = 1; i <= m; i++) {
    scanf("%lld%lld", &x, &y);
    mp[x][y] = mp[y][x] = 1;
  }
  for (i = 1; i <= n; i++) f[(1 << (i - 1))][i] = 1;
  for (z = 1; z < (1 << n); z++) {
    for (s = 1; s <= n; s++)
      if (z & (1 << (s - 1))) break;
    for (t = 1; t <= n; t++)
      if ((z & (1 << (t - 1))) && (f[z][t])) {
        for (i = s; i <= n; i++)
          if (mp[t][i]) {
            if (z & (1 << (i - 1))) {
              if (((1 << (i - 1)) + (1 << (t - 1))) == z) continue;
              if (i == s) re += f[z][t];
            } else
              f[z | (1 << (i - 1))][i] += f[z][t];
          }
      }
  }
  printf("%lld\n", re / 2);
}
