#include <bits/stdc++.h>
#define FORE(i, a, b) for(int i = a; i <= b; i++)
#define FORD(i, a, b) for(int i = a; i >= b; i--)
#define FOR(i, a, b) for(int i = a; i < b; i++)
const int MAXN = 1e5 * 5;
const int INF = 1e9 + 7;
using namespace std;
int n, m;
bool a[50][50];
typedef pair<int, int> ii;
vector< ii > s1, s2;
int dem;
bool Free[50];
inline void duyet(int u)
{
//cout<<u<<endl;
dem++;
Free[u] = 0;
FORE(v, 1, n) if (u != v && a[u][v] && Free[v] > 0){
duyet(v);
}
}
vector< int > adj[MAXN];
int Low[MAXN], Num[MAXN], Count = 0, Pa[MAXN], C[MAXN];
inline void dfs(int u)
{
Count++;
Num[u] = Count;
Low[u] = n + 1;
C[u] = 1;
FOR(i, 0, adj[u].size()){
int v = adj[u][i];
if (Pa[v] == 0){
Pa[v] = u;
dfs(v);
C[u] += C[v];
Low[u] = min(Low[u], Low[v]);
} else
if (Pa[u] != v) Low[u] = min(Low[u], Num[v]);
}
}
long long sd[3];
int main()
{
ios::sync_with_stdio(0); cin.tie(0);
#ifndef ONLINE_JUDGE
freopen("REFORM.inp", "r", stdin);
freopen("REFORM.out", "w", stdout);
#endif //yeulaptrinh.pw
cin >> n >> m;
if (n <= 20){
FORE(i, 1, m){
int x, y;
cin >> x >> y;
a[x][y] = 1;
a[y][x] = 1;
}
long long ans = 0;
FORE(x, 1, n) FORE(y, x + 1, n) if (a[x][y] == 1){
s2.push_back(ii(x, y));
} else s1.push_back(ii(x, y));
FOR(i, 0, s1.size())
FOR(j, 0, s2.size()){
int u1 = s1[i].first, v1 = s1[i].second;
int u2 = s2[j].first, v2 = s2[j].second;
a[u1][v1] = 1; a[v1][u1] = 1;
a[u2][v2] = 0; a[v2][u2] = 0;
memset(Free, 1, sizeof(Free));
dem = 0;
// cout<<u1<<" "<<v1<<" "<<u2<<" "<<v2<<endl;
duyet(1);
if (dem == n) ans++;
a[u1][v1] = 0; a[v1][u1] = 0;
a[u2][v2] = 1; a[v2][u2] = 1;
}
cout << ans << endl;
}
else
{
int u, v;
FORE(i, 1, m){
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
int dlt = 0;
FORE(u, 1, n) if (Pa[u] == 0){
Pa[u] = -1;
Count = 0;
dfs(u);
dlt++;
sd[dlt] = Count;
}
//cout<<dlt<<"??"<<endl;
if (dlt > 2){
cout << 0 << endl;
return 0;
}
//FORE(u, 1, n) cout << C[u]<<" ";cout<<endl;
long long ans = 0, Cau = 0, SZ = 1LL * n * (n - 1) / 2;
FORE(v, 1, n){
u = Pa[v];
if (u == -1 || Low[v] < Num[v]) continue;
ans += 1LL * C[v] * (n - C[v]) - 1;
Cau++;
}
//cout << Cau<<"??"<<ans<<endl;
if (dlt == 1){
ans += 1LL * (m - Cau) * (SZ - m);
cout << ans;
} else{
long long ans = 1LL * sd[1] * sd[2] * (m - Cau);
cout << ans;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SRShpLCBhLCBiKSBmb3IoaW50IGkgPSBhOyBpIDw9IGI7IGkrKykKI2RlZmluZSBGT1JEKGksIGEsIGIpIGZvcihpbnQgaSA9IGE7IGkgPj0gYjsgaS0tKQojZGVmaW5lIEZPUihpLCBhLCBiKSBmb3IoaW50IGkgPSBhOyBpIDwgYjsgaSsrKQpjb25zdCBpbnQgTUFYTiA9IDFlNSAqIDU7CmNvbnN0IGludCBJTkYgPSAxZTkgKyA3OwogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKaW50IG4sIG07CmJvb2wgYVs1MF1bNTBdOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp2ZWN0b3I8IGlpID4gczEsIHMyOwppbnQgZGVtOwpib29sIEZyZWVbNTBdOwogCmlubGluZSB2b2lkIGR1eWV0KGludCB1KQp7CiAgICAvL2NvdXQ8PHU8PGVuZGw7CiAgICBkZW0rKzsKICAgIEZyZWVbdV0gPSAwOwogICAgRk9SRSh2LCAxLCBuKSBpZiAodSAhPSB2ICYmIGFbdV1bdl0gJiYgRnJlZVt2XSA+IDApewogICAgICAgIGR1eWV0KHYpOwogICAgfQp9CiAKdmVjdG9yPCBpbnQgPiBhZGpbTUFYTl07CmludCBMb3dbTUFYTl0sIE51bVtNQVhOXSwgQ291bnQgPSAwLCBQYVtNQVhOXSwgQ1tNQVhOXTsKIAppbmxpbmUgdm9pZCBkZnMoaW50IHUpCnsKICAgIENvdW50Kys7CiAgICBOdW1bdV0gPSBDb3VudDsKICAgIExvd1t1XSA9IG4gKyAxOwogICAgQ1t1XSA9IDE7CiAgICBGT1IoaSwgMCwgYWRqW3VdLnNpemUoKSl7CiAgICAgICAgaW50IHYgPSBhZGpbdV1baV07CiAgICAgICAgaWYgKFBhW3ZdID09IDApewogICAgICAgICAgICBQYVt2XSA9IHU7CiAgICAgICAgICAgIGRmcyh2KTsKICAgICAgICAgICAgQ1t1XSArPSBDW3ZdOwogICAgICAgICAgICBMb3dbdV0gPSBtaW4oTG93W3VdLCBMb3dbdl0pOwogICAgICAgIH0gZWxzZQogICAgICAgICAgICBpZiAoUGFbdV0gIT0gdikgTG93W3VdID0gbWluKExvd1t1XSwgTnVtW3ZdKTsKICAgIH0KfQogCmxvbmcgbG9uZyBzZFszXTsKaW50IG1haW4oKQp7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsKICAgICNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCJSRUZPUk0uaW5wIiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJSRUZPUk0ub3V0IiwgInciLCBzdGRvdXQpOwogICAgI2VuZGlmIC8veWV1bGFwdHJpbmgucHcKICAgIGNpbiA+PiBuID4+IG07CiAKICAgIGlmIChuIDw9IDIwKXsKICAgICAgICBGT1JFKGksIDEsIG0pewogICAgICAgICAgICBpbnQgeCwgeTsKICAgICAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICAgICAgYVt4XVt5XSA9IDE7CiAgICAgICAgICAgIGFbeV1beF0gPSAxOwogICAgICAgIH0KICAgICAgICBsb25nIGxvbmcgYW5zID0gMDsKICAgICAgICBGT1JFKHgsIDEsIG4pIEZPUkUoeSwgeCArIDEsIG4pIGlmIChhW3hdW3ldID09IDEpewogICAgICAgICAgICBzMi5wdXNoX2JhY2soaWkoeCwgeSkpOwogICAgICAgIH0gZWxzZSBzMS5wdXNoX2JhY2soaWkoeCwgeSkpOwogICAgICAgIEZPUihpLCAwLCBzMS5zaXplKCkpCiAgICAgICAgRk9SKGosIDAsIHMyLnNpemUoKSl7CiAgICAgICAgICAgIGludCB1MSA9IHMxW2ldLmZpcnN0LCB2MSA9IHMxW2ldLnNlY29uZDsKICAgICAgICAgICAgaW50IHUyID0gczJbal0uZmlyc3QsIHYyID0gczJbal0uc2Vjb25kOwogICAgICAgICAgICBhW3UxXVt2MV0gPSAxOyBhW3YxXVt1MV0gPSAxOwogICAgICAgICAgICBhW3UyXVt2Ml0gPSAwOyBhW3YyXVt1Ml0gPSAwOwogICAgICAgICAgICBtZW1zZXQoRnJlZSwgMSwgc2l6ZW9mKEZyZWUpKTsKICAgICAgICAgICAgZGVtID0gMDsKICAgICAgICAgICAvLyBjb3V0PDx1MTw8IiAiPDx2MTw8IiAiPDx1Mjw8IiAiPDx2Mjw8ZW5kbDsKIAogICAgICAgICAgICBkdXlldCgxKTsKICAgICAgICAgICAgaWYgKGRlbSA9PSBuKSBhbnMrKzsKICAgICAgICAgICAgYVt1MV1bdjFdID0gMDsgYVt2MV1bdTFdID0gMDsKICAgICAgICAgICAgYVt1Ml1bdjJdID0gMTsgYVt2Ml1bdTJdID0gMTsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBhbnMgPDwgZW5kbDsKICAgIH0KICAgIGVsc2UKIAogICAgewogICAgICAgIGludCB1LCB2OwogICAgICAgIEZPUkUoaSwgMSwgbSl7CiAgICAgICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgICAgIGFkalt1XS5wdXNoX2JhY2sodik7CiAgICAgICAgICAgIGFkalt2XS5wdXNoX2JhY2sodSk7CiAgICAgICAgfQogICAgICAgIGludCBkbHQgPSAwOwogICAgICAgIEZPUkUodSwgMSwgbikgaWYgKFBhW3VdID09IDApewogICAgICAgICAgICBQYVt1XSA9IC0xOwogICAgICAgICAgICBDb3VudCA9IDA7CiAgICAgICAgICAgIGRmcyh1KTsKICAgICAgICAgICAgZGx0Kys7CiAgICAgICAgICAgIHNkW2RsdF0gPSBDb3VudDsKICAgICAgICB9CiAgICAgICAgLy9jb3V0PDxkbHQ8PCI/PyI8PGVuZGw7CiAgICAgICAgaWYgKGRsdCA+IDIpewogICAgICAgICAgICBjb3V0IDw8IDAgPDwgZW5kbDsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogCiAgICAgICAgLy9GT1JFKHUsIDEsIG4pIGNvdXQgPDwgQ1t1XTw8IiAiO2NvdXQ8PGVuZGw7CiAgICAgICAgICAgIGxvbmcgbG9uZyBhbnMgPSAwLCBDYXUgPSAwLCBTWiA9IDFMTCAqIG4gKiAobiAtIDEpIC8gMjsKICAgICAgICAgICAgRk9SRSh2LCAxLCBuKXsKICAgICAgICAgICAgICAgIHUgPSBQYVt2XTsKICAgICAgICAgICAgICAgIGlmICh1ID09IC0xIHx8IExvd1t2XSA8IE51bVt2XSkgY29udGludWU7CiAgICAgICAgICAgICAgICBhbnMgKz0gMUxMICogQ1t2XSAqIChuIC0gQ1t2XSkgLSAxOwogICAgICAgICAgICAgICAgQ2F1Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9jb3V0IDw8IENhdTw8Ij8/Ijw8YW5zPDxlbmRsOwogICAgICAgICAgICBpZiAoZGx0ID09IDEpewogICAgICAgICAgICAgICAgYW5zICs9IDFMTCAqIChtIC0gQ2F1KSAqIChTWiAtIG0pOwogICAgICAgICAgICAgICAgY291dCA8PCBhbnM7CiAgICAgICAgICAgIH0gZWxzZXsKICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBhbnMgPSAxTEwgKiBzZFsxXSAqIHNkWzJdICogKG0gLSBDYXUpOwogICAgICAgICAgICAgICAgY291dCA8PCBhbnM7CiAgICAgICAgICAgIH0KIAogICAgfQogICAgcmV0dXJuIDA7Cn0=