#include "triples.h"
#include<bits/stdc++.h>
using namespace std;
const int lim = 3;
long long count_triples(vector<int> a) {
/*Subtask 1-3*/
long long ans = 0;
int n = a.size();
for(int i = 1; i <= n; i++) a.push_back(0); //Avoid RTE
for(int i = 0; i < n; i++){
for(int j = i+2; j < min(n, i+lim+1); j++){
//Fix two ends
//Case 1: a[i] = x, a[j] = y
if(a[i]+a[j] == j-i && a[i+a[i]] == j-i) ans++;
//Case 2: a[i] = y, a[j] = x
if(a[i] != a[j] && a[i]+a[j] == j-i && a[i+a[j]] == j-i) ans++;
//Case 3: a[i] = x+y, a[j] = x
if(a[i] == j-i && a[j] < a[i] && a[i+a[j]] == (a[i]-a[j])) ans++;
//Case 4: a[i] = x+y, a[j] = y
if(a[i] == j-i && a[j] < a[i] && a[i+(a[i]-a[j])] == (a[i]-a[j]) && a[i] != a[j] * 2) ans++;
//Case 5: a[i] = x, a[j] = x+y
if(a[j] == j-i && a[i] < a[j] && a[i+a[i]] == (a[j]-a[i])) ans++;
//Case 6: a[i] = y, a[j] = x+y
if(a[j] == j-i && a[i] < a[j] && a[i+(a[j] - a[i])] == (a[j]-a[i]) && a[j] != a[i] * 2) ans++;
}
}
return ans;
}
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
vector<int> construct_range(int m, int K) {
if(m > 20){
vector<int> ans = {1, 1};
for(int i = 2; i <= m-1; i++) ans.push_back(i);
return ans;
}
vector<int> a;
for(int i = 1; i <= m; i++) a.push_back(rng()%lim+1);
int maxval = count_triples(a);
vector<int> ans = a;
long long st = chrono::high_resolution_clock::now().time_since_epoch().count();
while(true){
a.clear();
for(int i = 1; i <= m; i++) a.push_back(rng()%lim+1);
int curval = count_triples(a);
if(curval > maxval){maxval = curval; ans = a;}
long long et = chrono::high_resolution_clock::now().time_since_epoch().count();
if(et - st > 1900000000) break;
}
return ans;
}