#include <iostream>
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int n;
vector<vector<int>>adj;
ll dp[20][(1<<19)];
ll solve(int i, int mask){
if(~dp[i][mask]) return dp[i][mask];
ll ans = 0ll;
for(auto x: adj[i]){
if((mask&(1<<x)) != 0) ans++;
else ans += solve(x,mask|(1<<x));
}
return dp[i][mask] = ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
memset(dp,-1,sizeof(dp));
cin>>n; int m; cin>>m;
adj.resize(n);
ll ans = 0;
for(int i = 0; i < m; i++){
int u,v; cin>>u>>v; u--; v--;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i = 0; i < n ; i++){
bool ok = 1;
for(int mask = 0; mask < (1<<n) ; mask++){
if(~dp[i][mask]) {ok = 0; break;}
}
if(ok) ans += solve(i,0);
}
cout<<ans - m<<endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4gCnR5cGVkZWYgbG9uZyBsb25nIGxsOyAKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBuOyAKdmVjdG9yPHZlY3RvcjxpbnQ+PmFkajsgCmxsIGRwWzIwXVsoMTw8MTkpXTsgCgpsbCBzb2x2ZShpbnQgaSwgaW50IG1hc2spewogCiAgaWYofmRwW2ldW21hc2tdKSByZXR1cm4gZHBbaV1bbWFza107IAoKICBsbCBhbnMgPSAwbGw7IAoKICBmb3IoYXV0byB4OiBhZGpbaV0pewogICAgIGlmKChtYXNrJigxPDx4KSkgIT0gMCkgYW5zKys7IAogICAgIGVsc2UgYW5zICs9IHNvbHZlKHgsbWFza3woMTw8eCkpOyAKICB9IAogIHJldHVybiBkcFtpXVttYXNrXSA9IGFuczsgCgp9CmludCBtYWluKCkgewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAogICAgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7IAogICAgCiAgICBtZW1zZXQoZHAsLTEsc2l6ZW9mKGRwKSk7IAogICAgY2luPj5uOyBpbnQgbTsgY2luPj5tOyAKICAgIGFkai5yZXNpemUobik7IAogICAgbGwgYW5zID0gMDsgCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbTsgaSsrKXsKICAgICAgIGludCB1LHY7IGNpbj4+dT4+djsgdS0tOyB2LS07IAogICAgICAgYWRqW3VdLnB1c2hfYmFjayh2KTsgCiAgICAgICBhZGpbdl0ucHVzaF9iYWNrKHUpOyAKCiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbiA7IGkrKyl7CiAgICAgICAgYm9vbCBvayA9IDE7IAogICAgICAgIGZvcihpbnQgbWFzayA9IDA7IG1hc2sgPCAoMTw8bikgOyBtYXNrKyspewogICAgICAgICAgICBpZih+ZHBbaV1bbWFza10pIHtvayA9IDA7IGJyZWFrO30gCgogICAgICAgICB9CiAgICAgICAgIGlmKG9rKSBhbnMgKz0gc29sdmUoaSwwKTsgCgogICAgfQogICAgY291dDw8YW5zIC0gbTw8ZW5kbDsgCiAgICAKfQo=