#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
long long gcd(long long a, long long b) {
if (a > b) return gcd(b, a);
if (a == 0) return b;
return gcd(b % a, a);
}
long long pow(long long a, long long n, long long mod) {
long long ret = 1;
for (; n > 0; n >>= 1, a = a * a % mod) {
if (n % 2 == 1) ret = ret * a % mod;
}
return ret;
}
long long inv(long long a, long long mod) {
a = (a % mod + mod) % mod;
if (gcd(a, mod) != 1) return 0;
return pow(a, mod - 2, mod);
}
int main() {
for (long long mod = 3; mod < 100; ++mod) {
bool isPrime = true;
for (long long div = 2; div * div <= mod; ++div) {
isPrime &= mod % div != 0;
}
if (!isPrime) continue;
long long sum = 0;
for (int i = 1; i < mod; ++i) {
sum += i * inv(1 + i - i * i, mod) % mod;
sum %= mod;
}
long long b = (mod - pow(5, (mod - 3) / 2, mod)) % mod;
std::cout << mod << " " << sum << " " << b << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8cXVldWU+Cgpsb25nIGxvbmcgZ2NkKGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgYikgewogIGlmIChhID4gYikgcmV0dXJuIGdjZChiLCBhKTsKICBpZiAoYSA9PSAwKSByZXR1cm4gYjsKICByZXR1cm4gZ2NkKGIgJSBhLCBhKTsKfQoKbG9uZyBsb25nIHBvdyhsb25nIGxvbmcgYSwgbG9uZyBsb25nIG4sIGxvbmcgbG9uZyBtb2QpIHsKICBsb25nIGxvbmcgcmV0ID0gMTsKICBmb3IgKDsgbiA+IDA7IG4gPj49IDEsIGEgPSBhICogYSAlIG1vZCkgewogICAgaWYgKG4gJSAyID09IDEpIHJldCA9IHJldCAqIGEgJSBtb2Q7CiAgfQogIHJldHVybiByZXQ7Cn0KCmxvbmcgbG9uZyBpbnYobG9uZyBsb25nIGEsIGxvbmcgbG9uZyBtb2QpIHsKICBhID0gKGEgJSBtb2QgKyBtb2QpICUgbW9kOwogIGlmIChnY2QoYSwgbW9kKSAhPSAxKSByZXR1cm4gMDsKICByZXR1cm4gcG93KGEsIG1vZCAtIDIsIG1vZCk7Cn0KCmludCBtYWluKCkgeyAKICBmb3IgKGxvbmcgbG9uZyBtb2QgPSAzOyBtb2QgPCAxMDA7ICsrbW9kKSB7CiAgICBib29sIGlzUHJpbWUgPSB0cnVlOwogICAgZm9yIChsb25nIGxvbmcgZGl2ID0gMjsgZGl2ICogZGl2IDw9IG1vZDsgKytkaXYpIHsKICAgICAgaXNQcmltZSAmPSBtb2QgJSBkaXYgIT0gMDsKICAgIH0KICAgIGlmICghaXNQcmltZSkgY29udGludWU7CiAgICBsb25nIGxvbmcgc3VtID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbW9kOyArK2kpIHsKICAgICAgc3VtICs9IGkgKiBpbnYoMSArIGkgLSBpICogaSwgbW9kKSAlIG1vZDsKICAgICAgc3VtICU9IG1vZDsKICAgIH0KICAgIGxvbmcgbG9uZyBiID0gKG1vZCAtICBwb3coNSwgKG1vZCAtIDMpIC8gMiwgbW9kKSkgJSBtb2Q7CiAgICBzdGQ6OmNvdXQgPDwgbW9kIDw8ICIgIiA8PCBzdW0gPDwgIiAiIDw8IGIgPDwgc3RkOjplbmRsOwogIH0KfQo=