艹!!!!!!!!!!!!
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const LL mod =998244353;
const int N = 505;
bool vis[N][N];
int f[2][N][N];
int row[2][N][N],col[2][N][N];
int n, m, q, K;
vector<pair<int,int>> vec[101];
void solve() {
for(int i = 1; i <= 100;i++) vec[i].clear();
memset(vis,0,sizeof vis);
memset(f,0,sizeof f);
memset(row,0,sizeof row);
memset(col,0,sizeof col);
cin >> n >> m >> q >> K;
K++;
for(int i = 1; i <= q; i++) {
int x, y, t;
cin >> x >> y >> t;
vec[t].push_back({x, y});
}
f[1][1][1] = 1;
int ans = 0;
LL sum = 0;
for(int k = 1; k <= K; k++) {
for(auto [x, y]: vec[k]) {
vis[x][y] = true;
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
f[(k&1)][i][j] += (row[(k&1)^1][i][j-1] + col[(k&1)^1][i-1][j]) % mod;
row[(k&1)][i][j] = (row[(k&1)][i][j-1] + f[(k&1)][i][j]) % mod;
col[(k&1)][i][j] = (col[(k&1)][i-1][j] + f[(k&1)][i][j]) % mod;
if(vis[i][j]) f[k&1][i][j] = row[(k&1)][i][j] = col[k&1][i][j] = 0;
}
}
if(f[(k&1)][n][m]) {
if(!ans) ans = k - 1;
sum = (sum + f[(k&1)][n][m]) % mod;
}
// memcpy(f[(k&1)^1], f[(k&1)], sizeof f[0]);
// memcpy(row[(k&1)^1], row[(k&1)], sizeof row[0]);
// memcpy(col[(k&1)^1], col[(k&1)], sizeof col[0]);
// memset(f[(k&1)], 0, sizeof f[0]);
// memset(row[(k&1)], 0, sizeof row[0]);
// memset(col[(k&1)], 0, sizeof col[0]);
memset(f[(k&1)^1], 0, sizeof f[0]);
memset(row[(k&1)^1], 0, sizeof row[0]);
memset(col[(k&1)^1], 0, sizeof col[0]);
}
if(ans) {
cout << sum << " " << ans << "\n";
} else {
cout << -1 << "\n";
}
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int T = 1;
cin >> T;
while(T--) solve();
}
// 64 位输出请用 printf("%lld")



京公网安备 11010502036488号