#include<cstdio>
#include<vector>
int n,m;
std::vector<int>edge[500005];
const int Mod=1e9+7;
bool vis[25];
long long calc(){
    
}
long long res;
void dfs(int dep){
    if(dep>n){
        res+=calc();
        res%=Mod;
        return;
    }
    vis[dep]=1;
    dfs(dep+1);
    vis[dep]=0;
    dfs(dep+1);
}
int main(){
    freopen("barrack.in","r",stdin);
    freopen("barrack.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int u,v;
        scanf("%d%d",&u,&v);
        edge[u].push_back(v);
        edge[v].push_back(u);
    }
    if(n<=16&&m<=25){
        dfs(1);
    }
    if(m==n-1){
        long long res=0;
        for(int i=1;i<=n;i++){
            
        }
    }
    return 0;
}