#include<bits/stdc++.h>
using namespace std;
int N,M,maxre;
bool can[21][21];
long long ANS,dp[524300][19];
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> N >> M;maxre = 1<<N;
for(int i = 1;i <= M;++i){
int u,v;cin >> u >> v;
can[u-1][v-1] = can[v-1][u-1] = 1;
}
for(int S = 0;S < N;++S){dp[1<<S][S] = 1;}
for(int re = 1;re < maxre;++re){
long long val = 0x7fffffffffffffff;
for(int u = 0;u < N;++u){
if(((1<<u)&re)==0)continue;
val = min(val,dp[re][u]);
if(!dp[re][u])continue;
for(int v = 0;v < N;++v){
if(((1<<v)&re)||!can[u][v]) continue;
dp[re|(1<<v)][v] += dp[re][u];
}
}
ANS += val/2;
}
cout << ANS;
return 0;
}