#include <bits/stdc++.h>
using namespace std;
bool sortbysec(const pair<int, int>& a, const pair<int, int>& b) {
  return (a.second < b.second);
}
long long int containsDigit(long long int number, long long int digit) {
  while (number != 0) {
    int curr_digit = number % 10;
    if (curr_digit == digit) return 1;
    number /= 10;
  }
  return 0;
}
long long int soltn(long long int x, long long int n) {
  if (x >= 0)
    return x % n;
  else
    return n + x % n;
}
long long int bin_srch(long long int L[], long long int N, long long int item) {
  long long int flag = -2;
  int l = 0, u = N - 1, m;
  while (l <= u) {
    m = (l + u) / 2;
    if (item == L[m]) {
      flag = m - 1;
      break;
    } else if (item > L[m])
      l = m - 1;
    else
      u = m + 1;
  }
  return flag;
}
long long int modExp(long long int b, long long int p) {
  long long int res = 1;
  while (p > 0) {
    if (p & 1) {
      res = (res * b) % 1000000007;
    }
    b = (b * b) % 1000000007;
    p >>= 1;
  }
  return res;
}
long long int properdiv(long long int x, long long int y) {
  if (x % y == 0)
    return x / y;
  else
    return x / y + 1;
}
long long int coda(long long int n, long long int d) {
  long long int count = 0;
  while (n != 0) {
    if (n % 10 == d) count++;
    n /= 10;
  }
  return count;
}
long long int minDissame(long long int a[], long long int n) {
  map<long long int, long long int> hmap;
  long long int minDistance = INT_MAX;
  long long int previousIndex = 0, currentIndex = 0;
  for (long long int i = 0; i < n; i++) {
    if (hmap.find(a[i]) != hmap.end()) {
      currentIndex = i;
      previousIndex = hmap[a[i]];
      minDistance = min((currentIndex - previousIndex), minDistance);
    }
    hmap[a[i]] = i;
  }
  return (minDistance == INT_MAX ? -1 : minDistance);
}
long long int minDistanytwo(long long int arr[], long long int n,
                            long long int x, long long int y) {
  long long int p = -1, min_dist = INT_MAX;
  for (long long int i = 0; i < n; i++) {
    if (arr[i] == x || arr[i] == y) {
      if (p != -1 && arr[i] != arr[p]) min_dist = min(min_dist, i - p);
      p = i;
    }
  }
  if (min_dist == INT_MAX) return -1;
  return min_dist;
}
long long int mdls(long long int x) { return max(x, -x); }
long long int pow1(long long int n, long long int p) {
  if (p == 0) return 1;
  long long int x = pow1(n, p / 2);
  x = (x * x) % 1000000007;
  if (p % 2 == 0)
    return x;
  else
    return (x * n) % 1000000007;
}
string fumn(string s) {
  string p;
  for (long long int i = 0; i < s.length(); i++)
    if (isalpha(s[i])) p += toupper(s[i]);
  return p;
}
long long int turns(string S, string SS) {
  long long int i, cc = 0, l = S.length();
  for (long long int i = 0; i < l; i++) {
    if (S[i] != SS[i]) cc++;
  }
  return cc / 2;
}
long double polygonArea(long double X[], long double Y[], long long int n) {
  double area = 0.0;
  long long int j = n - 1;
  for (long long int i = 0; i < n; i++) {
    area += (X[j] + X[i]) * (Y[j] - Y[i]);
    j = i;
  }
  return abs(area / 2.0);
}
long long int isSubstr(string s1, string s2) {
  long long int M = s1.length();
  long long int N = s2.length();
  for (long long int i = 0; i <= N - M; i++) {
    long long int j;
    for (j = 0; j < M; j++)
      if (s2[i + j] != s1[j]) break;
    if (j == M) return i;
  }
  return -1;
}
long long int hhh2(unsigned long long int n) {
  if (n < 1) return 0;
  long long int res = 1;
  long long int u = 0;
  for (long long int i = 0; i < 8 * sizeof(unsigned long long int); i++) {
    long long int curr = 1 << i;
    if (curr > n) break;
    u++;
    res = curr;
  }
  return u;
}
long double ldgcd(long double a, long double b) {
  return a < 0.0001 ? b : ldgcd(fmod(b, a), a);
}
void onesol(long long int a, long long int b, long long int& x,
            long long int& y, long long int& g) {
  if (!b) {
    g = a;
    x = 1;
    y = 0;
  } else {
    onesol(b, a % b, y, x, g);
    y -= a / b * x;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long int t = 1;
  cin >> t;
  while (t--) {
    long long int n, m, z = 0, i, j, k, l, a, b, c, d;
    cin >> n >> m >> a >> b >> c >> d;
    long long int A = mdls(a - c), B = mdls(b - d);
    cout << n * m - 2 * (n - A) * (m - B) +
                max(z, n - A * 2) * max(z, m - B * 2);
    cout << "\n";
  }
  return 0;
}

### Prompt

Please create a solution in cpp to the following problem:

Petya is the most responsible worker in the Research Institute. So he was asked to make a very important experiment: to melt the chocolate bar with a new laser device. The device consists of a rectangular field of n × m cells and a robotic arm. Each cell of the field is a 1 × 1 square. The robotic arm has two lasers pointed at the field perpendicularly to its surface. At any one time lasers are pointed at the centres of some two cells. Since the lasers are on the robotic hand, their movements are synchronized — if you move one of the lasers by a vector, another one moves by the same vector.

The following facts about the experiment are known: 

  * initially the whole field is covered with a chocolate bar of the size n × m, both lasers are located above the field and are active; 
  * the chocolate melts within one cell of the field at which the laser is pointed; 
  * all moves of the robotic arm should be parallel to the sides of the field, after each move the lasers should be pointed at the centres of some two cells; 
  * at any one time both lasers should be pointed at the field. Petya doesn't want to become a second Gordon Freeman. 



You are given n, m and the cells (x1, y1) and (x2, y2), where the lasers are initially pointed at (xi is a column number, yi is a row number). Rows are numbered from 1 to m from top to bottom and columns are numbered from 1 to n from left to right. You are to find the amount of cells of the field on which the chocolate can't be melted in the given conditions.

Input

The first line contains one integer number t (1 ≤ t ≤ 10000) — the number of test sets. Each of the following t lines describes one test set. Each line contains integer numbers n, m, x1, y1, x2, y2, separated by a space (2 ≤ n, m ≤ 109, 1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m). Cells (x1, y1) and (x2, y2) are distinct.

Output

Each of the t lines of the output should contain the answer to the corresponding input test set.

Examples

Input

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


Output

8
2

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
bool sortbysec(const pair<int, int>& a, const pair<int, int>& b) {
  return (a.second < b.second);
}
long long int containsDigit(long long int number, long long int digit) {
  while (number != 0) {
    int curr_digit = number % 10;
    if (curr_digit == digit) return 1;
    number /= 10;
  }
  return 0;
}
long long int soltn(long long int x, long long int n) {
  if (x >= 0)
    return x % n;
  else
    return n + x % n;
}
long long int bin_srch(long long int L[], long long int N, long long int item) {
  long long int flag = -2;
  int l = 0, u = N - 1, m;
  while (l <= u) {
    m = (l + u) / 2;
    if (item == L[m]) {
      flag = m - 1;
      break;
    } else if (item > L[m])
      l = m - 1;
    else
      u = m + 1;
  }
  return flag;
}
long long int modExp(long long int b, long long int p) {
  long long int res = 1;
  while (p > 0) {
    if (p & 1) {
      res = (res * b) % 1000000007;
    }
    b = (b * b) % 1000000007;
    p >>= 1;
  }
  return res;
}
long long int properdiv(long long int x, long long int y) {
  if (x % y == 0)
    return x / y;
  else
    return x / y + 1;
}
long long int coda(long long int n, long long int d) {
  long long int count = 0;
  while (n != 0) {
    if (n % 10 == d) count++;
    n /= 10;
  }
  return count;
}
long long int minDissame(long long int a[], long long int n) {
  map<long long int, long long int> hmap;
  long long int minDistance = INT_MAX;
  long long int previousIndex = 0, currentIndex = 0;
  for (long long int i = 0; i < n; i++) {
    if (hmap.find(a[i]) != hmap.end()) {
      currentIndex = i;
      previousIndex = hmap[a[i]];
      minDistance = min((currentIndex - previousIndex), minDistance);
    }
    hmap[a[i]] = i;
  }
  return (minDistance == INT_MAX ? -1 : minDistance);
}
long long int minDistanytwo(long long int arr[], long long int n,
                            long long int x, long long int y) {
  long long int p = -1, min_dist = INT_MAX;
  for (long long int i = 0; i < n; i++) {
    if (arr[i] == x || arr[i] == y) {
      if (p != -1 && arr[i] != arr[p]) min_dist = min(min_dist, i - p);
      p = i;
    }
  }
  if (min_dist == INT_MAX) return -1;
  return min_dist;
}
long long int mdls(long long int x) { return max(x, -x); }
long long int pow1(long long int n, long long int p) {
  if (p == 0) return 1;
  long long int x = pow1(n, p / 2);
  x = (x * x) % 1000000007;
  if (p % 2 == 0)
    return x;
  else
    return (x * n) % 1000000007;
}
string fumn(string s) {
  string p;
  for (long long int i = 0; i < s.length(); i++)
    if (isalpha(s[i])) p += toupper(s[i]);
  return p;
}
long long int turns(string S, string SS) {
  long long int i, cc = 0, l = S.length();
  for (long long int i = 0; i < l; i++) {
    if (S[i] != SS[i]) cc++;
  }
  return cc / 2;
}
long double polygonArea(long double X[], long double Y[], long long int n) {
  double area = 0.0;
  long long int j = n - 1;
  for (long long int i = 0; i < n; i++) {
    area += (X[j] + X[i]) * (Y[j] - Y[i]);
    j = i;
  }
  return abs(area / 2.0);
}
long long int isSubstr(string s1, string s2) {
  long long int M = s1.length();
  long long int N = s2.length();
  for (long long int i = 0; i <= N - M; i++) {
    long long int j;
    for (j = 0; j < M; j++)
      if (s2[i + j] != s1[j]) break;
    if (j == M) return i;
  }
  return -1;
}
long long int hhh2(unsigned long long int n) {
  if (n < 1) return 0;
  long long int res = 1;
  long long int u = 0;
  for (long long int i = 0; i < 8 * sizeof(unsigned long long int); i++) {
    long long int curr = 1 << i;
    if (curr > n) break;
    u++;
    res = curr;
  }
  return u;
}
long double ldgcd(long double a, long double b) {
  return a < 0.0001 ? b : ldgcd(fmod(b, a), a);
}
void onesol(long long int a, long long int b, long long int& x,
            long long int& y, long long int& g) {
  if (!b) {
    g = a;
    x = 1;
    y = 0;
  } else {
    onesol(b, a % b, y, x, g);
    y -= a / b * x;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long int t = 1;
  cin >> t;
  while (t--) {
    long long int n, m, z = 0, i, j, k, l, a, b, c, d;
    cin >> n >> m >> a >> b >> c >> d;
    long long int A = mdls(a - c), B = mdls(b - d);
    cout << n * m - 2 * (n - A) * (m - B) +
                max(z, n - A * 2) * max(z, m - B * 2);
    cout << "\n";
  }
  return 0;
}

```