#include "triples.h"
#include <bits/stdc++.h>
using namespace std;
bool check_triple(int a, int b, int c, int N, vector<int>& H) {
if(a < 0 || a >= N || b < 0 || b >= N || c < 0 || c >= N) return false;
vector<int> distances = {abs(a - b), abs(b - c), abs(c - a)};
sort(distances.begin(), distances.end());
vector<int> heights = {H[a], H[b], H[c]};
sort(heights.begin(), heights.end());
return distances == heights;
}
void get_triples(int a, int b, int N, vector<int> H, vector<vector<int>>& triples) {
if(a < 0 || a >= N || b < 0 || b >= N) return;
if(check_triple(a, b, a + H[a], N, H)) triples.push_back({a, b, a + H[a]});
if(check_triple(a, b, b + H[a], N, H)) triples.push_back({a, b, b + H[a]});
if(check_triple(a, b, a + H[b], N, H)) triples.push_back({a, b, a + H[b]});
if(check_triple(a, b, b + H[b], N, H)) triples.push_back({a, b, b + H[b]});
if(check_triple(a, b, a - H[a], N, H)) triples.push_back({a, b, a - H[a]});
if(check_triple(a, b, b - H[a], N, H)) triples.push_back({a, b, b - H[a]});
if(check_triple(a, b, a - H[b], N, H)) triples.push_back({a, b, a - H[b]});
if(check_triple(a, b, b - H[b], N, H)) triples.push_back({a, b, b - H[b]});
}
long long count_triples(vector<int> H) {
vector<vector<int>> triples;
int N = H.size();
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
get_triples(i, j, N, H, triples);
}
}
for(int i = 0; i < triples.size(); i++) {
sort(triples[i].begin(), triples[i].end());
}
sort(triples.begin(), triples.end());
long long ret = 0;
if(triples.size() != 0) ret = 1;
for(int i = 1; i < triples.size(); i++) if(triples[i] != triples[i - 1]) ret++;
return ret;
}
vector<int> construct_range(int M, int K) {
return {1, 1, 1};
}