#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; 
    
}
