#include "triangles.h"
#include <bits/stdc++.h>

/*std::vector<std::vector<int>> solve(int n) {
    // Example of compare:
    // Пример использования функции compare:
    std::vector<Triangle> left = {Triangle(0, 1, 2)};
    std::vector<Triangle> right = {Triangle(0, 1, 2)};
    int compare_result = compare(left, right);
    // compare_result should be equal to 0.
    // compare_result будет равняться нулю, так как сравнивались одинаковые треугольники.
    
    // Example of return:
    // Пример возвращаемого значения:
    std::vector<std::vector<int>> ans;
    ans.push_back(std::vector<int>(n));
    for (int i = 0; i < n; ++i) {
        ans[0][i] = i;
    }
    return ans;
}*/

std::vector<std::vector<int>> solve(int n) {
    int mn = 0, f = -1;
    std::vector<std::vector<Triangle>> v(n);
    std::vector<Triangle> t;
    int mx = -1;
    for (int i = 0; i < n; ++i) {
        for (int j = i + 1; j < n; ++j) {
            for (int k = j + 1; k < n; ++k) {
                if (mx != -1) {
                    if (compare({t[mx]}, {Triangle{i, j, k}}) == -1) {
                        mx = t.size();
                    }
                } else {
                    mx = 0;
                }
                t.push_back(Triangle{i, j, k});
            }
        }
    }
    for (int i = 0; i < n; ++i) {
        std::vector<Triangle> cur;
        for (int j = 0; j < n; ++j) {
            if (j == i) {
                continue;
            }
            for (int k = j + 1; k < n; ++k) {
                if (k == i || k == j) {
                    continue;
                }
                cur.push_back(Triangle{i, j, k});
            }
        }
        int x = compare({t[mx]}, cur);
        if (x == 0) {
            mn = i;
            f = 1;
        }
        v[i] = cur;
    }
    if (f == 1) {
        std::vector<std::vector<int>> ans(3);
        int id = 0;
        for (Triangle i : v[mn]) {
            ans[id] = std::vector{i.i, i.j, i.k};
            id++;
        }
        return ans;
    } else {
        exit(52);
        std::vector<std::vector<int>> ans(3);
        return ans;
    }
}