// #include </home/olymp/work/untitled1/debug.h>
// #define M(x) #x

#include <bits/stdc++.h>
#include "triangles.h"
#pragma GCC optimize("Ofast")

using namespace std;
using ll = long long;
//
// # define len(x) ((ll) x.size())
// const ll inf = 1e18;

bool check_unique(Triangle tr) {
    vector<int> ids = {tr.i, tr.j, tr.k};
    int center = -1;
    for (ll i = 0; i < 4; ++i) {
        if (find(ids.begin(), ids.end(), i) == ids.end()) {
            center = i;
            break;
        }
    }
    return compare({Triangle(ids[0], ids[1], ids[2])}, {Triangle(center, ids[0], ids[1]), Triangle(center, ids[1], ids[2]), Triangle(center, ids[0], ids[2])}) != 0;
}

std::vector<std::vector<int>> solve(int n) {
    // vector<Triangle> tr;
    // for (ll i = 0; i < 4; ++i) {
    //     for (ll j = i + 1; j < 4; ++j) {
    //         for (ll k = j + 1; k < 4; ++k) {
    //             tr.push_back(Triangle(i, j, k));
    //         }
    //     }
    // }
    // sort(tr.begin(), tr.end(), [&](const Triangle& ax, const Triangle& bx) -> bool {
    //     return compare({ax}, {bx}) < 0;
    // });
    //
    // vector<int> ids = {tr.back().i, tr.back().j, tr.back().k};
    // int center = -1;
    // for (ll i = 0; i < 4; ++i) {
    //     if (find(ids.begin(), ids.end(), i) == ids.end()) {
    //         center = i;
    //         break;
    //     }
    // }
    vector<vector<int>> ans;
    for (int i = 0; i < 4; ++i) {
        for (int j = i + 1; j < 4; ++j) {
            for (int k = j + 1; k < 4; ++k) {
                if (check_unique(Triangle(i, j, k))) {
                    ans.push_back({i, j, k});
                }
            }
        }
    }
    if (ans.size() == 3) {
        return ans;
    }
    throw(0);
}

// int main() {
//     ios::sync_with_stdio(false);
//     cin.tie(nullptr);
//
//     return 0;
// }