#include <iostream>
#include <algorithm>
using namespace std;
const int n = 5000;
const int m = 5;
const int Dmax = n + 100;
int D, itor[Dmax] = {}, rtoi[Dmax];
long long d[n];
int A[n], B[n], p[n];
int main(void)
{
int a, b, i, j, k, r, ra, rb;
for (D = n + 1; D <= Dmax; D++) {
fill(rtoi, rtoi + D, 0);
for (i = 1; i <= n; i++) {
r = (long long)i * i * i % D;
if (rtoi[r]) break; else rtoi[r] = i;
}
if (i > n) break;
}
if (D > Dmax) return cout << "D not found." << endl, -1;
for (r = 0; r < D; r++) itor[rtoi[r]] = r;
for (r = 1; r < D; r++) {
for (k = 0, a = 2; a <= n; a++) {
ra = itor[a];
if ((rb = ra - r) < 0) rb += D;
if (b = rtoi[rb], b == 0 || b >= a) continue;
d[k] = (long long)a * a * a - (long long)b * b * b;
A[k] = a;
B[k] = b;
p[k] = k;
k++;
}
sort(p, p + k, [](int x, int y) {return d[x] < d[y];});
for (i = 0; i < k - m + 1; i++) {
if (d[p[i]] != d[p[i + m - 1]]) continue;
cout << d[p[i]] << ": ";
for (j = i + m; j < k && d[p[j]] == d[p[i]]; j++);
sort(p + i, p + j, [](int x, int y) {return A[x] < A[y];});
for_each(p + i, p + j, [&](int &x) {
cout << (&x > p + i ? ", (" : "(") << A[x] << ", " << B[x] << ")";
});
cout << endl;
i = j - 1;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBuID0gNTAwMDsKY29uc3QgaW50IG0gPSA1Owpjb25zdCBpbnQgRG1heCA9IG4gKyAxMDA7CgppbnQgRCwgaXRvcltEbWF4XSA9IHt9LCBydG9pW0RtYXhdOwpsb25nIGxvbmcgZFtuXTsKaW50IEFbbl0sIEJbbl0sIHBbbl07CgppbnQgbWFpbih2b2lkKQp7CiAgICBpbnQgYSwgYiwgaSwgaiwgaywgciwgcmEsIHJiOwoKICAgIGZvciAoRCA9IG4gKyAxOyBEIDw9IERtYXg7IEQrKykgewogICAgICAgIGZpbGwocnRvaSwgcnRvaSArIEQsIDApOwogICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIHIgPSAobG9uZyBsb25nKWkgKiBpICogaSAlIEQ7CiAgICAgICAgICAgIGlmIChydG9pW3JdKSBicmVhazsgZWxzZSBydG9pW3JdID0gaTsKICAgICAgICB9CiAgICAgICAgaWYgKGkgPiBuKSBicmVhazsKICAgIH0KICAgIGlmIChEID4gRG1heCkgcmV0dXJuIGNvdXQgPDwgIkQgbm90IGZvdW5kLiIgPDwgZW5kbCwgLTE7CiAgICBmb3IgKHIgPSAwOyByIDwgRDsgcisrKSBpdG9yW3J0b2lbcl1dID0gcjsKCiAgICBmb3IgKHIgPSAxOyByIDwgRDsgcisrKSB7CiAgICAgICAgZm9yIChrID0gMCwgYSA9IDI7IGEgPD0gbjsgYSsrKSB7CiAgICAgICAgICAgIHJhID0gaXRvclthXTsKICAgICAgICAgICAgaWYgKChyYiA9IHJhIC0gcikgPCAwKSByYiArPSBEOwogICAgICAgICAgICBpZiAoYiA9IHJ0b2lbcmJdLCBiID09IDAgfHwgYiA+PSBhKSBjb250aW51ZTsKICAgICAgICAgICAgZFtrXSA9IChsb25nIGxvbmcpYSAqIGEgKiBhIC0gKGxvbmcgbG9uZyliICogYiAqIGI7CiAgICAgICAgICAgIEFba10gPSBhOwogICAgICAgICAgICBCW2tdID0gYjsKICAgICAgICAgICAgcFtrXSA9IGs7CiAgICAgICAgICAgIGsrKzsKICAgICAgICB9CiAgICAgICAgc29ydChwLCBwICsgaywgW10oaW50IHgsIGludCB5KSB7cmV0dXJuIGRbeF0gPCBkW3ldO30pOwoKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgayAtIG0gKyAxOyBpKyspIHsKICAgICAgICAgICAgaWYgKGRbcFtpXV0gIT0gZFtwW2kgKyBtIC0gMV1dKSBjb250aW51ZTsKCiAgICAgICAgICAgIGNvdXQgPDwgZFtwW2ldXSA8PCAiOiAiOwogICAgICAgICAgICBmb3IgKGogPSBpICsgbTsgaiA8IGsgJiYgZFtwW2pdXSA9PSBkW3BbaV1dOyBqKyspOwogICAgICAgICAgICBzb3J0KHAgKyBpLCBwICsgaiwgW10oaW50IHgsIGludCB5KSB7cmV0dXJuIEFbeF0gPCBBW3ldO30pOwogICAgICAgICAgICBmb3JfZWFjaChwICsgaSwgcCArIGosIFsmXShpbnQgJngpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgKCZ4ID4gcCArIGkgPyAiLCAoIiA6ICIoIikgPDwgQVt4XSA8PCAiLCAiIDw8IEJbeF0gPDwgIikiOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY291dCA8PCBlbmRsOwogICAgICAgICAgICBpID0gaiAtIDE7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0=