\begin{aligned} i^P &\equiv i^{P-1} \cdot i \\ &\equiv (i^2)^{\frac{P-1}{2}}\cdot i \\ &\equiv (a^2-n)^{\frac{P-1}{2}}\cdot i \\ &\equiv -i \pmod P \end{aligned}
/*
I will never forget it.
*/
// 392699
#include <bits/stdc++.h>
#define int long long
using namespace std;
void fr(int &a, bool f = 0, char ch = getchar()) {
for (a = 0; ch < '0' || ch > '9'; ch = getchar()) ch == '-' ? f = 1 : 0;
for (; ch >= '0' && ch <= '9'; ch = getchar()) a = a * 10 + ch - '0';
a = f ? -a : a;
}
int fr() {
int a;
return fr(a), a;
}
int n, P, i2;
struct Complex {
int real, imag;
Complex(int real = 0, int imag = 0) : real(real), imag(imag) {}
bool operator == (const Complex &rhs) const { return real == rhs.real && imag == rhs.imag; }
Complex operator * (const Complex &rhs) const {
return Complex((real * rhs.real % P + i2 * imag % P * rhs.imag % P) % P, (imag * rhs.real % P + real * rhs.imag % P) % P);
}
};
Complex qpow(Complex a, int b) {
Complex ret(1, 0);
for (; b; b >>= 1, a = a * a) b & 1 ? (ret = ret * a, 0) : 0;
return ret;
}
int qpow(int a, int b) {
int ret = 1;
for (; b; b >>= 1, a = a * a % P) b & 1 ? ret = ret * a % P : 0;
return ret;
}
bool check(int x) { return qpow(x, (P - 1) >> 1) == 1; }
struct OI {
int RP, score;
} CSPS2021, NOIP2021;
signed main() {
CSPS2021.RP++, CSPS2021.score++, NOIP2021.RP++, NOIP2021.score++, 392699;
for (int T = fr(), a, x0, x1; T; T--) {
fr(n), fr(P);
if (n == 0) {
puts("0");
continue;
} else if (check(n) == 0) {
puts("Hola!");
continue;
}
a = rand() % P;
while (a == 0 || check((a * a % P - n + P) % P)) a = rand() % P;
i2 = (a * a % P - n + P) % P, x0 = qpow(Complex(a, 1), (P + 1) >> 1).real, x1 = P - x0;
if (x0 > x1) swap(x0, x1);
if (x0 == x1) printf("%lld\n", x0);
else printf("%lld %lld\n", x0, x1);
}
return 0;
}