#include <bits/stdc++.h>
using namespace std;
bool is_even(int i) { return (i + 1) % 2 == 0; }
bool is_fine(int i, vector<int>& in) {
  int s = in.size() - 1;
  if (is_even(i)) {
    if (i < s && in[i] <= in[i + 1]) {
      return false;
    }
    if (i > 0 && in[i] <= in[i - 1]) {
      return false;
    }
  } else {
    if (i < s && in[i] >= in[i + 1]) {
      return false;
    }
    if (i > 0 && in[i] >= in[i - 1]) {
      return false;
    }
  }
  return true;
}
bool good(vector<int>& in, set<int>& bad) {
  int s = bad.size() - 1;
  for (int i : bad) {
    if (!is_fine(i, in)) {
      return false;
    }
  }
  return true;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  vector<int> in(n);
  for (int& it : in) {
    cin >> it;
  }
  set<int> bad;
  for (int i = 0; i < n; i++) {
    if (!is_fine(i, in)) {
      bad.insert(i);
    }
  }
  if (bad.size() > 10) {
    cout << 0;
    return 0;
  }
  set<pair<int, int> > result;
  for (int i : bad) {
    for (int j = 0; j < n; j++) {
      if (i == j) continue;
      swap(in[i], in[j]);
      if (is_fine(i, in) && is_fine(j, in)) {
        bool fine = true;
        for (int k : bad) {
          if (!is_fine(k, in)) {
            fine = false;
            break;
          }
        }
        if (fine) {
          result.insert({min(i, j), max(i, j)});
        }
      }
      swap(in[i], in[j]);
    }
  }
  cout << result.size();
}
