#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ii pair<ll, ll>
#define fi first
#define se second
using namespace std;
struct Item
{
ll x, y, h;
int id;
Item(ll x = 0, ll y = 0, ll h = 0, int id = 0) :
x(x), y(y), h(h), id(id) {};
bool operator < (const Item &other) const
{
return x > other.x;
}
};
const int maxn = 3e3;
const ll INF = 1e18;
int n;
vector<Item> it, trace;
ii dp[maxn + 10], ans;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("TOWER.INP", "r"))
{
freopen("TOWER.INP", "r", stdin);
freopen("TOWER.OUT", "w", stdout);
}
cin >> n;
for (int i = 1; i <= n; i++)
{
ll x, y, z;
cin >> x >> y >> z;
it.push_back(Item(x, y, z, i));
it.push_back(Item(z, x, y, i));
it.push_back(Item(y, z, x, i));
}
n = it.size();
it.push_back(Item(INF, INF, 0, 0));
sort(it.begin(), it.end());
for (int i = 1; i <= n; i++)
for (int j = 0; j < i; j++)
if (it[j].id != it[i].id && it[j].x > it[i].x && it[j].y > it[i].y)
dp[i] = max(dp[i], {dp[j].fi + it[i].h, j});
for (int i = 1; i <= n; i++)
if (ans.fi < dp[i].fi)
ans = {dp[i].fi, i};
while (ans.se)
{
trace.push_back(it[ans.se]);
ans.se = dp[ans.se].se;
}
reverse(trace.begin(), trace.end());
cout << ans.fi << ' ' << trace.size(), el;
for (Item res : trace)
{
ll x = res.x;
ll y = res.y;
if (x < y)
swap(x, y);
cout << x << ' ' << y << ' ' << res.h, el;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8bGwsIGxsPgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEl0ZW0KewogICAgbGwgeCwgeSwgaDsKICAgIGludCBpZDsKCiAgICBJdGVtKGxsIHggPSAwLCBsbCB5ID0gMCwgbGwgaCA9IDAsIGludCBpZCA9IDApIDoKICAgICAgICB4KHgpLCB5KHkpLCBoKGgpLCBpZChpZCkge307CiAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IEl0ZW0gJm90aGVyKSBjb25zdAogICAgewogICAgICAgIHJldHVybiB4ID4gb3RoZXIueDsKICAgIH0KfTsKCmNvbnN0IGludCBtYXhuID0gM2UzOwpjb25zdCBsbCBJTkYgPSAxZTE4OwoKaW50IG47CnZlY3RvcjxJdGVtPiBpdCwgdHJhY2U7CmlpIGRwW21heG4gKyAxMF0sIGFuczsKCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4oIlRPV0VSLklOUCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigiVE9XRVIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiVE9XRVIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIGNpbiA+PiBuOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGxsIHgsIHksIHo7CiAgICAgICAgY2luID4+IHggPj4geSA+PiB6OwogICAgICAgIGl0LnB1c2hfYmFjayhJdGVtKHgsIHksIHosIGkpKTsKICAgICAgICBpdC5wdXNoX2JhY2soSXRlbSh6LCB4LCB5LCBpKSk7CiAgICAgICAgaXQucHVzaF9iYWNrKEl0ZW0oeSwgeiwgeCwgaSkpOwogICAgfQogICAgbiA9IGl0LnNpemUoKTsKICAgIGl0LnB1c2hfYmFjayhJdGVtKElORiwgSU5GLCAwLCAwKSk7CiAgICBzb3J0KGl0LmJlZ2luKCksIGl0LmVuZCgpKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykKICAgICAgICAgICAgaWYgKGl0W2pdLmlkICE9IGl0W2ldLmlkICYmIGl0W2pdLnggPiBpdFtpXS54ICYmIGl0W2pdLnkgPiBpdFtpXS55KQogICAgICAgICAgICAgICAgZHBbaV0gPSBtYXgoZHBbaV0sIHtkcFtqXS5maSArIGl0W2ldLmgsIGp9KTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBpZiAoYW5zLmZpIDwgZHBbaV0uZmkpCiAgICAgICAgICAgIGFucyA9IHtkcFtpXS5maSwgaX07CiAgICB3aGlsZSAoYW5zLnNlKQogICAgewogICAgICAgIHRyYWNlLnB1c2hfYmFjayhpdFthbnMuc2VdKTsKICAgICAgICBhbnMuc2UgPSBkcFthbnMuc2VdLnNlOwogICAgfQogICAgcmV2ZXJzZSh0cmFjZS5iZWdpbigpLCB0cmFjZS5lbmQoKSk7CiAgICBjb3V0IDw8IGFucy5maSA8PCAnICcgPDwgdHJhY2Uuc2l6ZSgpLCBlbDsKICAgIGZvciAoSXRlbSByZXMgOiB0cmFjZSkKICAgIHsKICAgICAgICBsbCB4ID0gcmVzLng7CiAgICAgICAgbGwgeSA9IHJlcy55OwogICAgICAgIGlmICh4IDwgeSkKICAgICAgICAgICAgc3dhcCh4LCB5KTsKICAgICAgICBjb3V0IDw8IHggPDwgJyAnIDw8IHkgPDwgJyAnIDw8IHJlcy5oLCBlbDsKICAgIH0KfQo=