二次剩余模板
x2≡n(modp)x ^ 2 \equiv n \pmod px2≡n(modp)
/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>#define mp make_pair
#define pb push_back
#define endl '\n'
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}struct com {int real, image;com(int a = 0, int b = 0) : real(a), image(b) {}
};int I2, p;com operator * (com a, com b) {return com((1ll * a.real * b.real + 1ll * a.image * b.image % p * I2) % p, (1ll * a.real * b.image + 1ll * a.image * b.real) % p);
}com power(com a, int k) {com ans = 1;while(k) {if(k & 1) ans = ans * a;a = a * a;k >>= 1;}return ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int T = read();mt19937 e(233);while(T--) {int n = read();p = read();if(n == 0) {puts("0");continue;}if(power(n, (p - 1) >> 1).real == p - 1) {puts("Hola!");continue;}uniform_int_distribution<int> r(0, p - 1);int a = r(e);while(power((1ll * a * a % p - n + p) % p, (p - 1) >> 1).real == 1) a = r(e);I2 = (1ll * a * a % p - n + p) % p;int x = power(com(a, 1), (p + 1) >> 1).real, y = p - x;if(x > y) swap(x, y);printf("%d %d\n", x, y);}return 0;
}