alg2025/src/8/11/P11362.cpp
2025-08-11 17:58:00 +08:00

85 lines
1.6 KiB
C++

#include <iostream>
#include <map>
using ll = long long;
using namespace std;
const int MOD = 1e9 + 7;
ll p(ll b, ll e) {
ll res = 1;
b %= MOD;
while (e > 0) {
if (e % 2 == 1) res = (res * b) % MOD;
b = (b * b) % MOD;
e /= 2;
}
return res;
}
void solve() {
ll n;
int m;
ll v;
cin >> n >> m >> v;
map<int, int> mc;
for (int i = 0; i < m; ++i) {
int c, d;
cin >> c >> d;
if (mc.count(c) && mc[c] != d) {
for (int j = i + 1; j < m; ++j) cin >> c >> d;
cout << 0 << endl;
return;
}
mc[c] = d;
}
if (m == 0) {
if (n == 1) {
cout << 1 << endl;
} else {
cout << p(v, (n - 1) * 2) << endl;
}
return;
}
ll tot = 1;
ll vmod = v % MOD;
int lp = 0;
for (auto const& [idx, val] : mc) {
ll len = idx - lp;
if (len > 0) {
ll s;
if (lp == 0) {
s = p(vmod, (len - 1) * 2);
} else {
ll v2len = p(vmod, len * 2);
ll vlen = p(vmod, len);
ll vlenm1 = p(vmod, len - 1);
s = (v2len - vlen + vlenm1 + MOD) % MOD;
}
tot = (tot * s) % MOD;
}
lp = idx;
}
if (lp < n) {
ll len = n - lp;
ll s = p(vmod, len * 2);
tot = (tot * s) % MOD;
}
cout << tot << endl;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
}