#include<bits/stdc++.h>
using namespace std;
int n,m,a[29][29],u[29],v[29],dep,fa[29],e[29],s[29],ans;
int g(int x)
{
    if(x==fa[x]) return x;
    return fa[x]=g(fa[x]);
}
void dfs(int k,int p)
{
	if(dep==k)
	{
		for(int i=1;i<=n;i++) fa[i]=i,s[i]=0;
		for(int i=1;i<=k;i++)
		{
			int X=g(u[e[i]]),Y=g(v[e[i]]);
			if(X!=Y)
			{
				fa[X]=Y;
			}
		}
		for(int i=1;i<=n;i++)
		{
			s[g(i)]++;
		}
		for(int i=1;i<=n;i++)
		{
			ans=(ans+(1<<s[i])-1)%1000000007;
		}
		return;
	}
	for(int i=p;i<=m;i++)
	{
		e[k+1]=i;
		dfs(k+1,i+1);
	}
}
int main()
{
	//freopen("barrack.in","r",stdin);
	//freopen("barrack.out","w",stdout);
	ans=0;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++) scanf("%d%d",&u[i],&v[i]);
	for(dep=0;dep<=m;dep++)
	{
		dfs(0,1);
	}
	printf("%d",ans);
	return 0;
}