Problem:
Score : 500 points

Problem Statement

Rng has a connected undirected graph with N vertices.
Currently, there are M edges in the graph, and the i-th edge connects Vertices A_i and B_i.

Rng will add new edges to the graph by repeating the following operation:

Operation: Choose u and v (u \neq v) such that Vertex v can be reached by traversing exactly three edges from Vertex u, and add an edge connecting Vertices u and v. It is not allowed to add an edge if there is already an edge connecting Vertices u and v.

Find the maximum possible number of edges that can be added.

Constraints

2 \leq N \leq 10^5

1 \leq M \leq 10^5

1 \leq A_i,B_i \leq N

The graph has no self-loops or multiple edges.

The graph is connected.

Input

Input is given from Standard Input in the following format:

N M
A_1 B_1
A_2 B_2
:
A_M B_M

Output

Find the maximum possible number of edges that can be added.

Sample Input 1

6 5
1 2
2 3
3 4
4 5
5 6

Sample Output 1

4

If we add edges as shown below, four edges can be added, and no more.

Sample Input 2

5 5
1 2
2 3
3 1
5 4
5 1

Sample Output 2

5

Five edges can be added, for example, as follows:

Add an edge connecting Vertex 5 and Vertex 3.

Add an edge connecting Vertex 5 and Vertex 2.

Add an edge connecting Vertex 4 and Vertex 1.

Add an edge connecting Vertex 4 and Vertex 2.

Add an edge connecting Vertex 4 and Vertex 3.

Solution in C (GCC 5.4.1) (judge verdict: Runtime Error)

#include <math.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM 10000

int main() {
  int i, j, k, l;
  bool **route = (bool **)malloc(sizeof(bool *) * NUM);
  for (i = 0; i < NUM; i++) {
    route[i] = (bool *)malloc(sizeof(bool *) * NUM);
  }
  for (i = 0; i < NUM; i++) {
    for (j = 0; j < NUM; j++) {
      route[i][j] = false;
    }
  }

  int N, M;
  int t1, t2;
  long long int ans = 0;
  scanf("%d %d", &N, &M);
  for (i = 0; i < M; i++) {
    scanf("%d %d", &t1, &t2);
    route[t1][t2] = true;
    route[t2][t1] = true;
  }
  int changecount;
  while (1) {
    changecount = 0;
    // printf("%d", changecount);

    for (i = 1; i <= N; i++) {
      for (j = 1; j <= N; j++) {
        if (i == k || j == k) {
          continue;
        }
        if (route[i][j]) {
          for (k = 1; k <= N; k++) {
            if (i == l || j == l) {
              continue;
            }
            if (route[j][k]) {
              for (l = 1; l <= N; l++) {
                if(i==l || k == l){
          continue;
        }
                if (route[k][l]) {
                  if(route[i][l] == false){
                  route[i][l] = true;
                  route[l][i] = true;
                  ans++;
                  changecount++;
                  }
                } else {
                  continue;
                }
              }
            } else {
              continue;
            }
          }
        } else {
          continue;
        }
      }
    }

    if (changecount == 0) {
      break;
    }
  }

  printf("%lld", ans);

  return 0;
}