rt.
#include <bits/stdc++.h>
using lint = long long;
const int N = 1e5 + 10;
lint fact[N];
int T, n, m, p;
void init() {
fact[0] = 1;
for (int i = 1; i <= n + m; ++i)
fact[i] = fact[i - 1] * i % p;
}
lint qpow(lint a, lint b) {
a %= p;
lint res = 1 % p;
for (; b; b >>= 1) {
if (b & 1) (res *= a) %= p;
(a *= a) %= p;
}
return res;
}
lint inv(lint x) {
return qpow(x, p - 2);
}
lint C(lint n, lint m) {
if (m > n) return 0;
return fact[n] * inv(n - m) % p * inv(m) % p;
}
lint Lucas(lint n, lint m) {
if (!m) return 1;
return C(n % p, m % p) * Lucas(n / p, m / p) % p;
}
int main() {
for (std::cin >> T; T; --T) {
std::cin >> n >> m >> p;
init();
std::cout << Lucas(n + m, n) << std::endl;
}
return 0;
}