#include <bits/stdc++.h>
#define Pct puts("------ Yes ------");
#define rep(a, b, c) for(int a = (b); a <= (c); ++ a)
#define per(a, b, c) for(int a = (b); a >= (c); -- a)
#define fir first
#define sec second
#define ls son[u][0]
#define rs son[u][1]
#define eps 1e-8
#define PI acos(-1.0)
using namespace std;
template <class T> void rd(T &x){ x = 0; int f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') x = (x << 3) + (x << 1) + ch - '0', ch = getchar(); x *= f; }

typedef long long ll;
const int mod = 1e9 + 7;
int u[120], v[120], t[120];
int c[1 << 15], d[1 << 15];
int f[2][1 << 15];
int n, m, ans;

void add(int &a, int b){ a = (a + b) % mod; }

int main(){
	rd(n), rd(m);
	int all = (1 << n) - 1;
	t[0] = 1;
	rep(i, 1, m) rd(u[i]), rd(v[i]), t[i] = t[i - 1] * 2ll % mod;
	rep(i, 1, all){
		rep(j, 1, m){
			if(i & (1 << u[j] - 1) && i & (1 << v[j] - 1)) c[i] ++;
			if(i & (1 << u[j] - 1) || i & (1 << v[j] - 1)) d[i] ++;
		}
	}
	rep(i, 0, 1){
		rep(j, 1, all) if(j & (1 << i)){
			f[i][j] = t[c[j]];
			for(int k = j; k; k = (k - 1) & j)
				add(f[i][j], mod - (ll) f[i][j - k] * t[c[k]] % mod);
		}
	}
	rep(i, 1, all){
		int Ci = all ^ i;
		for(int j = Ci; j; j = (j - 1) & Ci){
			if(c[i] + c[j] != c[i | j]) continue;
			add(ans, (ll) f[0][i] * f[1][j] % mod * t[m - d[i | j]] % mod);
		}
	}
	printf("%d\n", (t[m] - ans + mod) % mod);
	return 0;
}