#include <bits/stdc++.h>
#define FOR(i, a, b) for(int i = (a), _b = (b); i <= _b; ++i)
#define fi first
#define se second
#define el "\n"
#define pb push_back
#define sz(a) (int)a.size()
#define FILL(a, x) memset(a, x, sizeof(a))
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int N = (int)1e6+3, MAX = (int)1e6;
ll F1[N], F2[N];
int mod, T;
int C[2005][2005];
bool p[N];
vector<int> Prime;
ll Mu(ll a, ll b){
if (b == 0) return 1;
ll res = 1;
a %= mod;
while(b != 0){
if (b&1){
res *= a;
res %= mod;
}
a *= a;
a %= mod;
b = (b >> 1);
}
return res;
}
void Build(){
F1[0] = 1;
FOR(i, 1, MAX) F1[i] = F1[i-1]*i%mod;
F2[MAX] = Mu(F1[MAX], mod - 2);
for(int i = MAX; i >= 1; i--) F2[i-1] = F2[i]*i%mod;
C[0][0] = 1;
FOR(i, 1, 2000){
C[0][i] = 1;
C[i][0] = 0;
}
FOR(i, 1, 2000)
FOR(j, 1, 2000){
if (i > j) C[i][j] = 0;
if (i == j) C[i][j] = 1;
if (i < j){
C[i][j] = C[i][j-1] + C[i-1][j-1];
if (C[i][j] >= mod) C[i][j] -= mod;
}
}
}
ll Get1(int k, int n){
return (F1[n]*F2[k]%mod*F2[n-k]%mod)%mod;
}
ll Get2(ll k, ll n){
n %= mod;
if (k > n) return 0;
ll res = F2[k];
FOR(i, 0, k-1) res = res*(n-i)%mod;
return res;
}
void Solve1(){
Build();
while(T--){
ll n , m, k, res;
cin >> n >> m >> k;
if (n <= 2000){
res = C[k][n-1];
} else if (n <= 1e6) res = Get1(k, n-1);
else res = Get2(k, n-1);
res = (res*m)%mod;
res = res*Mu(m-1, k)%mod;
while(res < 0) res += mod;
cout << res << el;
}
}
void Sieve(){
for(int i = 2; i*i <= MAX; i++)
if (!p[i])
for(int j = i*i; j <= MAX; j += i) p[j] = 1;
FOR(i, 2, MAX)
if (!p[i]) Prime.pb(i);
}
int Tinh(int p, ll H){
int res = 0;
ll Tam = p;
while(Tam <= H){
res += H/Tam;
Tam *= p;
}
return res;
}
void Solve2(){
Sieve();
while(T--){
ll n, m, k;
cin >> n >> m >> k;
ll res = 1;
for(int p : Prime){
if (p > n) break;
ll d = Tinh(p, n-1) - Tinh(p, k) - Tinh(p, n-k-1);
if (d > 0) res = res*Mu(p, d)%mod;
}
res = res*m%mod;
res = res*Mu(m-1, k)%mod;
cout << res << el;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
freopen("flowers.inp", "r", stdin);
freopen("flowers.out", "w", stdout);
cin >> T >> mod;
if (mod == 998244353) Solve1();
else Solve2();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvcihpbnQgaSA9IChhKSwgX2IgPSAoYik7IGkgPD0gX2I7ICsraSkKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBzeihhKSAoaW50KWEuc2l6ZSgpCiNkZWZpbmUgRklMTChhLCB4KSBtZW1zZXQoYSwgeCwgc2l6ZW9mKGEpKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gaWk7CmNvbnN0IGludCBOID0gKGludCkxZTYrMywgTUFYID0gKGludCkxZTY7CmxsIEYxW05dLCBGMltOXTsKaW50IG1vZCwgVDsKaW50IENbMjAwNV1bMjAwNV07CmJvb2wgcFtOXTsKdmVjdG9yPGludD4gUHJpbWU7CgpsbCBNdShsbCBhLCBsbCBiKXsKICAgaWYgKGIgPT0gMCkgcmV0dXJuIDE7CiAgIGxsIHJlcyA9IDE7CiAgIGEgJT0gbW9kOwogICB3aGlsZShiICE9IDApewogICAgICBpZiAoYiYxKXsKICAgICAgICAgcmVzICo9IGE7CiAgICAgICAgIHJlcyAlPSBtb2Q7CiAgICAgIH0KICAgICAgYSAqPSBhOwogICAgICBhICU9IG1vZDsKICAgICAgYiA9IChiID4+IDEpOwogICB9CiAgIHJldHVybiByZXM7Cn0KCnZvaWQgQnVpbGQoKXsKICBGMVswXSA9IDE7CiAgRk9SKGksIDEsIE1BWCkgRjFbaV0gPSBGMVtpLTFdKmklbW9kOwogIEYyW01BWF0gPSBNdShGMVtNQVhdLCBtb2QgLSAyKTsKICBmb3IoaW50IGkgPSBNQVg7IGkgPj0gMTsgaS0tKSBGMltpLTFdID0gRjJbaV0qaSVtb2Q7CiAgQ1swXVswXSA9IDE7CiAgRk9SKGksIDEsIDIwMDApewogICAgQ1swXVtpXSA9IDE7CiAgICBDW2ldWzBdID0gMDsKICB9CiAgRk9SKGksIDEsIDIwMDApCiAgIEZPUihqLCAxLCAyMDAwKXsKICAgICAgaWYgKGkgPiBqKSBDW2ldW2pdID0gMDsKICAgICAgaWYgKGkgPT0gaikgQ1tpXVtqXSA9IDE7CiAgICAgIGlmIChpIDwgail7CiAgICAgICAgQ1tpXVtqXSA9IENbaV1bai0xXSArIENbaS0xXVtqLTFdOwogICAgICAgIGlmIChDW2ldW2pdID49IG1vZCkgQ1tpXVtqXSAtPSBtb2Q7CiAgICAgIH0KICAgfQp9CgpsbCBHZXQxKGludCBrLCBpbnQgbil7CiAgcmV0dXJuIChGMVtuXSpGMltrXSVtb2QqRjJbbi1rXSVtb2QpJW1vZDsKfQoKbGwgR2V0MihsbCBrLCBsbCBuKXsKICAgbiAlPSBtb2Q7CiAgIGlmIChrID4gbikgcmV0dXJuIDA7CiAgIGxsIHJlcyA9IEYyW2tdOwogICBGT1IoaSwgMCwgay0xKSByZXMgPSByZXMqKG4taSklbW9kOwogICByZXR1cm4gcmVzOwp9Cgp2b2lkIFNvbHZlMSgpewogICBCdWlsZCgpOwogICB3aGlsZShULS0pewogICAgICBsbCBuICwgbSwgaywgcmVzOwogICAgICBjaW4gPj4gbiA+PiBtID4+IGs7CiAgICAgIGlmIChuIDw9IDIwMDApewogICAgICAgICByZXMgPSBDW2tdW24tMV07CiAgICAgIH0gZWxzZSBpZiAobiA8PSAxZTYpIHJlcyA9IEdldDEoaywgbi0xKTsKICAgICAgICAgZWxzZSByZXMgPSBHZXQyKGssIG4tMSk7CiAgICAgIHJlcyA9IChyZXMqbSklbW9kOwogICAgICByZXMgPSByZXMqTXUobS0xLCBrKSVtb2Q7CiAgICAgIHdoaWxlKHJlcyA8IDApIHJlcyArPSBtb2Q7CiAgICAgIGNvdXQgPDwgcmVzIDw8IGVsOwogICB9Cn0KCnZvaWQgU2lldmUoKXsKICAgZm9yKGludCBpID0gMjsgaSppIDw9IE1BWDsgaSsrKQogICAgIGlmICghcFtpXSkKICAgICAgZm9yKGludCBqID0gaSppOyBqIDw9IE1BWDsgaiArPSBpKSBwW2pdID0gMTsKICAgRk9SKGksIDIsIE1BWCkKICAgIGlmICghcFtpXSkgUHJpbWUucGIoaSk7Cn0KCmludCBUaW5oKGludCBwLCBsbCBIKXsKICAgaW50IHJlcyA9IDA7CiAgIGxsIFRhbSA9IHA7CiAgIHdoaWxlKFRhbSA8PSBIKXsKICAgICAgcmVzICs9IEgvVGFtOwogICAgICBUYW0gKj0gcDsKICAgfQogICByZXR1cm4gcmVzOwp9Cgp2b2lkIFNvbHZlMigpewogICBTaWV2ZSgpOwogICB3aGlsZShULS0pewogICAgICBsbCBuLCBtLCBrOwogICAgICBjaW4gPj4gbiA+PiBtID4+IGs7CiAgICAgIGxsIHJlcyA9IDE7CiAgICAgIGZvcihpbnQgcCA6IFByaW1lKXsKICAgICAgICAgaWYgKHAgPiBuKSBicmVhazsKICAgICAgICAgbGwgZCA9IFRpbmgocCwgbi0xKSAtIFRpbmgocCwgaykgLSBUaW5oKHAsIG4tay0xKTsKICAgICAgICAgaWYgKGQgPiAwKSByZXMgPSByZXMqTXUocCwgZCklbW9kOwogICAgICB9CiAgICAgIHJlcyA9IHJlcyptJW1vZDsKICAgICAgcmVzID0gcmVzKk11KG0tMSwgayklbW9kOwogICAgICBjb3V0IDw8IHJlcyA8PCBlbDsKICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsgICAgY291dC50aWUoTlVMTCk7CiAgICBmcmVvcGVuKCJmbG93ZXJzLmlucCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3BlbigiZmxvd2Vycy5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICBjaW4gPj4gVCA+PiBtb2Q7CiAgICBpZiAobW9kID09IDk5ODI0NDM1MykgU29sdmUxKCk7CiAgICAgZWxzZSBTb2x2ZTIoKTsKICAgIHJldHVybiAwOwp9Cg==