#include #define endl '\n' #define int long long using namespace std; const int MAXN=2e3+5; int n,m; vector adj[MAXN]; int edge[MAXN][MAXN]; int lpCnt=0; bool used[MAXN]; int tin[MAXN]; int low[MAXN]; int t=1; int cur=0; void dfs1(int v,int par) { used[v]=1; tin[v]=low[v]=t++; for(auto u: adj[v]) { if(u==par) continue; if(used[u]) { low[v]=min(low[v], tin[u]); continue; } dfs1(u,v); low[v]=min(low[v], low[u]); if(tin[v]>n>>m; for(int i=0;i>u>>v; edge[u][v]++; edge[v][u]++; if(u==v) continue; if(edge[u][v]>1) continue; adj[u].push_back(v); adj[v].push_back(u); } dfs1(1,0); long long ans=1LL*cur*n-1LL*cur*(cur-1)/2; long long add=0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { if(edge[i][j]>0 && edge[i][j]<=2) { edge[i][j]--; edge[j][i]--; cur=0; t=1; fill(tin+1,tin+n+1,0); fill(low+1,low+n+1,0); fill(used+1,used+n+1,0); dfs2(j,0); edge[i][j]++; edge[j][i]++; add+=cur*edge[i][j]; } } } ans+=(add/2); cout<