#include <bits/stdc++.h>
using namespace std;
#define ff endl
#define lf "\n"
#define fi first
#define se second
#define _ << ' ' <<
#define all(x) begin(x),end(x)
#define rall(x) rbegin(x),rend(x)
#ifdef DEBUG
constexpr bool IS_DEBUG = 1;
#define infor(fmt, ...) do { print(stderr, fmt, ##__VA_ARGS__); } while(0)
#define infof(fmt, ...) do { println(stderr, fmt, ##__VA_ARGS__); } while(0)
#else
constexpr bool IS_DEBUG = 0;
#define infor(fmt, ...)
#define infof(fmt, ...)
#endif
using ll = long long;
using pll = pair<ll, ll>;
using pii = pair<int, int>;
template<typename... Args>
using vec = vector<Args...>;
constexpr int LOG = 20;
constexpr int MOD = 1e9+7;
constexpr int MAXN = 1e5+7;
mt19937 timmy_loves_gambling(73);
long long count_triples(vector<int> H) {
const int N = H.size();
auto check_triple_6 = [&](int i, int j, int k) -> int {
return j - i == H[k]
&& k - i == H[j]
&& k - j == H[i];
};
auto check_triple_1 = [&](int i, int j, int k, int ret = 0) -> int {
if(check_triple_6(i, j, k)) return ret;
return j - i == H[i]
&& k - i == H[j]
&& k - j == H[k];
};
auto check_triple_2 = [&](int i, int j, int k, int ret = 0) -> int {
if(check_triple_1(i, j, k, 1)) return ret;
return j - i == H[i]
&& k - i == H[k]
&& k - j == H[j];
};
auto check_triple_3 = [&](int i, int j, int k, int ret = 0) -> int {
if(check_triple_2(i, j, k, 1)) return ret;
return j - i == H[j]
&& k - i == H[i]
&& k - j == H[k];
};
auto check_triple_4 = [&](int i, int j, int k, int ret = 0) -> int {
if(check_triple_3(i, j, k, 1)) return ret;
return j - i == H[j]
&& k - i == H[k]
&& k - j == H[i];
};
auto check_triple_5 = [&](int i, int j, int k, int ret = 0) -> int {
if(check_triple_4(i, j, k, 1)) return ret;
return j - i == H[k]
&& k - i == H[i]
&& k - j == H[j];
};
ll ans = 0;
for(int i = 0; i < N; ++i) {
int j = i + H[i];
if(j < N) {
if(i + H[j] < N) ans += check_triple_1(i, j, i + H[j]);
if(j + H[j] < N) ans += check_triple_2(i, j, j + H[j]);
}
}
for(int j = 0; j < N; ++j) {
int i = j - H[j];
if(i >= 0) {
if(i + H[i] < N) ans += check_triple_3(i, j, i + H[i]);
if(j + H[i] < N) ans += check_triple_4(i, j, j + H[i]);
}
}
for(int i = 0; i < N; ++i) {
int k = i + H[i];
if(k < N) {
if(i + H[k] < N) ans += check_triple_5(i, i + H[k], k);
}
}
if(!is_sorted(all(H))) {
for(int i = 0; i < N; ++i) {
for(int j = i + 1; j + H[i] < N; ++j) {
if(i + H[j] == j + H[i]) {
ans += check_triple_6(i, j, j + H[i]);
}
}
}
}
return ans;
}
vector<int> construct_range(int M, int K) {
assert(0 && "construct_range: unimplemented");
}
#ifdef LOCAL
namespace {
void run_part1() {
int N;
assert(1 == scanf("%d", &N));
std::vector<int> H(N);
for (int i = 0; i < N; i++)
assert(1 == scanf("%d", &H[i]));
fclose(stdin);
long long T = count_triples(H);
printf("%lld\n", T);
fclose(stdout);
}
void run_part2() {
int M, K;
assert(2 == scanf("%d %d", &M, &K));
fclose(stdin);
std::vector<int> H = construct_range(M, K);
int N = H.size();
printf("%d\n", N);
for (int i = 0; i < N; i++)
printf("%d%c", H[i], " \n"[i + 1 == N]);
fclose(stdout);
}
} // namespace
int main() {
int part;
assert(1 == scanf("%d", &part));
if (part == 1)
run_part1();
else if (part == 2)
run_part2();
return 0;
}
#endif