#ifndef LOCAL
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include<vector>
#pragma GCC optimize("avx2")
#endif

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#include "triangles.h"


using namespace std;
using namespace __gnu_pbds;

using i128 = __int128;
using ll = long long;
using ld = long double;

template<typename T>
using orderet_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

template<typename T, typename V>
using table = gp_hash_table<T, V>;

const int inf = 2e9 + 7;
const ll INF = 4e18 + 7;
const int maxn = 5e5 + 7;
const int MOD = 998244353;

struct Triangle {
    int i, j, k;

    Triangle() = default;

    Triangle(int i_, int j_, int k_) : i(i_), j(j_), k(k_) {
    }
};

bool cmp(vector<int> a, vector<int> b) {
    vector<Triangle> x = {{a[0], a[1], a[2]}}, y = {{b[0], b[1], b[2]}};
    return compare(x, y) <= 0;
}

vector<vector<int> > solve(int n) {
    vector<vector<int> > v;
    for (int i = 0; i < n; ++i) {
        for (int j = i + 1; j < n; ++j) {
            for (int k = j + 1; k < n; ++k) {
                v.push_back({i, j, k});
            }
        }
    }
    sort(v.begin(), v.end(), cmp);
    return {v.back()};
}