#include <iostream>
#include <algorithm>
using namespace std;
const int n = 5000;
const int m = 5;
const int N = n * (n - 1) / 2;
long long d[N];
int p[N], q[N], s[n];
void MergeColumns(int l, int r, bool ptoq)
{
int c = (l + r) / 2;
if (c - l > 1) MergeColumns(l, c, !ptoq);
if (r - c > 1) MergeColumns(c, r, !ptoq);
int L = s[l], C = s[c], R = s[r];
int *S = ptoq ? p : q, *D = ptoq ? q : p;
merge(S + L, S + C, S + C, S + R, D + L, [](int x, int y) {return d[x] < d[y];});
}
int main(void)
{
int a, b, i, j;
for (s[i = 0] = 0, b = 1; b <= n - 1; b++) {
for (a = b + 1; a <= n; a++, i++) {
d[i] = (long long)a * a * a - (long long)b * b * b;
p[i] = q[i] = i;
}
s[b] = i;
}
MergeColumns(0, n - 1, false);
for (i = 0; i < N - m + 1; i++) {
if (d[p[i]] != d[p[i + m - 1]]) continue;
cout << d[p[i]] << ": ";
for (j = i + m; d[p[j]] == d[p[i]]; j++);
for_each(p + i, p + j, [&](int &x) {
b = upper_bound(s + 1, s + n, x) - s;
a = x - s[b - 1] + b + 1;
cout << (&x > p + i ? ", (" : "(") << a << ", " << b << ")";
});
cout << endl;
i = j - 1;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBuID0gNTAwMDsKY29uc3QgaW50IG0gPSA1Owpjb25zdCBpbnQgTiA9IG4gKiAobiAtIDEpIC8gMjsKCmxvbmcgbG9uZyBkW05dOwppbnQgcFtOXSwgcVtOXSwgc1tuXTsKCnZvaWQgTWVyZ2VDb2x1bW5zKGludCBsLCBpbnQgciwgYm9vbCBwdG9xKQp7CiAgICBpbnQgYyA9IChsICsgcikgLyAyOwogICAgaWYgKGMgLSBsID4gMSkgTWVyZ2VDb2x1bW5zKGwsIGMsICFwdG9xKTsKICAgIGlmIChyIC0gYyA+IDEpIE1lcmdlQ29sdW1ucyhjLCByLCAhcHRvcSk7CgogICAgaW50IEwgPSBzW2xdLCBDID0gc1tjXSwgUiA9IHNbcl07CiAgICBpbnQgKlMgPSBwdG9xID8gcCA6IHEsICpEID0gcHRvcSA/IHEgOiBwOwogICAgbWVyZ2UoUyArIEwsIFMgKyBDLCBTICsgQywgUyArIFIsIEQgKyBMLCBbXShpbnQgeCwgaW50IHkpIHtyZXR1cm4gZFt4XSA8IGRbeV07fSk7Cn0KCmludCBtYWluKHZvaWQpCnsKICAgIGludCBhLCBiLCBpLCBqOwoKICAgIGZvciAoc1tpID0gMF0gPSAwLCBiID0gMTsgYiA8PSBuIC0gMTsgYisrKSB7CiAgICAgICAgZm9yIChhID0gYiArIDE7IGEgPD0gbjsgYSsrLCBpKyspIHsKICAgICAgICAgICAgZFtpXSA9IChsb25nIGxvbmcpYSAqIGEgKiBhIC0gKGxvbmcgbG9uZyliICogYiAqIGI7CiAgICAgICAgICAgIHBbaV0gPSBxW2ldID0gaTsKICAgICAgICB9CiAgICAgICAgc1tiXSA9IGk7CiAgICB9CiAgICBNZXJnZUNvbHVtbnMoMCwgbiAtIDEsIGZhbHNlKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgTiAtIG0gKyAxOyBpKyspIHsKICAgICAgICBpZiAoZFtwW2ldXSAhPSBkW3BbaSArIG0gLSAxXV0pIGNvbnRpbnVlOwoKICAgICAgICBjb3V0IDw8IGRbcFtpXV0gPDwgIjogIjsKICAgICAgICBmb3IgKGogPSBpICsgbTsgZFtwW2pdXSA9PSBkW3BbaV1dOyBqKyspOwogICAgICAgIGZvcl9lYWNoKHAgKyBpLCBwICsgaiwgWyZdKGludCAmeCkgewogICAgICAgICAgICBiID0gdXBwZXJfYm91bmQocyArIDEsIHMgKyBuLCB4KSAtIHM7CiAgICAgICAgICAgIGEgPSB4IC0gc1tiIC0gMV0gKyBiICsgMTsKICAgICAgICAgICAgY291dCA8PCAoJnggPiBwICsgaSA/ICIsICgiIDogIigiKSA8PCBhIDw8ICIsICIgPDwgYiA8PCAiKSI7CiAgICAgICAgfSk7CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgICAgIGkgPSBqIC0gMTsKICAgIH0KICAgIHJldHVybiAwOwp9