#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const ll M = 1e9 + 7;
int n, m, ans(0), s[10010], idx;
int u[10010], v[10010], f[1010][1010];

inline bool check(int ver, int edge) {
	idx = 0;
	for (int i = 0; i < n; i++)
		if (ver & (1 << i))
			s[++idx] = i + 1;
	for (int i = 0; i < m; i++)
		if (!(edge & (1 << i))) {
			for (int x1 = 1; x1 <= n; x1++)
				for (int x2 = 1; x2 <= n; x2++)
					f[x1][x2] = (x1 == x2);
			for (int j = 1; j <= m; j++)
				if (j != i + 1)
					f[u[j]][v[j]] = f[v[j]][u[j]] = 1;
			for (int c = 1; c <= n; c++)
				for (int a = 1; a <= n; a++)
					for (int b = 1; b <= n; b++)
						if (f[a][c] && f[c][b])
							f[a][b] = 1;
			for (int a = 1; a < idx; a++)
				for (int b = a + 1; b <= idx; b++)
					if (!f[s[a]][s[b]])
						return false;
		}
	return true;
}

int main() {
	freopen("barrack.in", "r", stdin);
	freopen("barrack.out", "w", stdout);
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
		cin >> u[i] >> v[i];
	for (int i = 1; i < (1 << n); i++)
		for (int j = 0; j < (1 << m); j++)
			if (check(i, j))
				ans++;
	cout << ans << endl;
	return 0;
}