#include <cstdio>
#define MOD 1000000007
long long pw[115], dp[2][40005], ans; 
int x[115], y[115], in[40005], have[40005]; 
int main()
{
	// freopen("CF17-TR-I.in", "r", stdin); 
	int n, m; 
	scanf("%d%d", &n, &m);
	pw[0] = 1; 
	for (int i = 1; i <= 110; i++)
		pw[i] = (pw[i - 1] + pw[i - 1]) % MOD; 
	for (int i = 0; i < m; i++)
	{
		scanf("%d%d", x + i, y + i); 
		x[i]--;
		y[i]--; 
	}
	for (int i = 0; i < 1 << n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			in[i] += (i & (1 << x[j])) && (i & (1 << y[j]));
			have[i] += (i & (1 << x[j])) || (i & (1 << y[j]));
		}
	}
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 1 << n; j++)
		{
			if (!(j & (1 << i)))
				continue; 
			dp[i][j] = pw[in[j]];
			for (int k = j; k; k = k - 1 & j)
				(dp[i][j] -= dp[i][j ^ k] * pw[in[k]]) %= MOD; 
		}
	}
	for (int i = 0; i < 1 << n; i++)
	{
		int t = (1 << n) - 1 ^ i; 
		for (int j = t; ; j = j - 1 & t)
		{
			if (in[i] + in[j] == in[i | j])
				(ans += dp[0][i] * dp[1][j] % MOD * pw[m - have[i | j]]) %= MOD; 
			if (!j)
				break; 
		}
	}
	printf("%lld\n", (pw[m] - ans + MOD) % MOD);
	return 0; 
}
