#include "triangles.h"
#include <algorithm>

using namespace std;

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;

    for (int d = 0; d < n; ++d) {
        int a = (d + 1) % n;
        int b = (d + 2) % n;
        int c = (d + 3) % n;
        int t = compare({{a, b, d}, {a, c, d}, {b, c, d}}, {{a, b, c}});
        if (t == 0)
            return {{a, b, d}, {a, c, d}, {b, c, d}};
    }

    vector<vector<Triangle>> trs;
    for (int b = 1; b < n; ++b) {
        int a = 0;
        int c = 0;
        while (c == a || c == b)
            ++c;
        int d = 0;
        while (d == a || d == b || d == c)
            ++d;
        trs.push_back({{a, b, c}, {b, c, d}});
    }
    vector<Triangle> tmp = *max_element(trs.begin(), trs.end(), [](const vector<Triangle>& a, const vector<Triangle>& b)->bool {
        return compare(a, b) == 1;
    });
    vector<vector<int>> ans;
    for (const auto [a, b, c] : tmp)
        ans.push_back({a, b, c});
    return ans;
}
