For problem statement at 2000-2999/2000-2099/2070-2079/2075/problemE.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2070-2079/2075/verifierE.go ends with test 1: mismatch at case 1, expected 153 got 57
Input:
6
2 2 2 2
2 3 4 5
5 7 4 3
1337 42 1337 42
4 2 13 3
753687090 2 536370902 536390912
Output:
57
864
50360
439988899
6384
150165243
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
const MOD = 998244353
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
if _, err := fmt.Fscan(reader, &t); err != nil {
return
}
for i := 0; i < t; i++ {
var n, m, A, B int64
fmt.Fscan(reader, &n, &m, &A, &B)
A_mod := A % MOD
B_mod := B % MOD
dp := make([]int64, 16)
nextDp := make([]int64, 16)
dp[15] = 1
for k := 29; k >= 0; k-- {
bitA := (A >> k) & 1
bitB := (B >> k) & 1
for j := 0; j < 16; j++ {
nextDp[j] = 0
}
for mask := 0; mask < 16; mask++ {
if dp[mask] == 0 {
continue
}
tx1 := (mask >> 3) & 1
tx2 := (mask >> 2) & 1
ty1 := (mask >> 1) & 1
ty2 := mask & 1
for bx1 := int64(0); bx1 <= 1; bx1++ {
if tx1 == 1 && bx1 > bitA {
continue
}
ntx1 := tx1
if bx1 < bitA {
ntx1 = 0
}
for bx2 := int64(0); bx2 <= 1; bx2++ {
if tx2 == 1 && bx2 > bitA {
continue
}
ntx2 := tx2
if bx2 < bitA {
ntx2 = 0
}
for by1 := int64(0); by1 <= 1; by1++ {
if ty1 == 1 && by1 > bitB {
continue
}
nty1 := ty1
if by1 < bitB {
nty1 = 0
}
by2 := bx1 ^ bx2 ^ by1
if ty2 == 1 && by2 > bitB {
continue
}
nty2 := ty2
if by2 < bitB {
nty2 = 0
}
nmask := (ntx1 << 3) | (ntx2 << 2) | (nty1 << 1) | nty2
nextDp[nmask] = (nextDp[nmask] + dp[mask]) % MOD
}
}
}
}
dp, nextDp = nextDp, dp
}
var C int64 = 0
for mask := 0; mask < 16; mask++ {
C = (C + dp[mask]) % MOD
}
ways0 := (A_mod + 1) * (B_mod + 1) % MOD
C = (C - ways0 + MOD) % MOD
C = (C * 748683265) % MOD
powN := (power(2, n) - 2 + MOD) % MOD
powM := (power(2, m) - 2 + MOD) % MOD
ans := ways0
ans = (ans + (A_mod+1)*(B_mod+1)%MOD*B_mod%MOD*499122177%MOD*powM) % MOD
ans = (ans + (B_mod+1)*(A_mod+1)%MOD*A_mod%MOD*499122177%MOD*powN) % MOD
ans = (ans + powN*powM%MOD*C) % MOD
fmt.Fprintln(writer, ans)
}
}
func power(base, exp int64) int64 {
res := int64(1)
base %= MOD
for exp > 0 {
if exp%2 == 1 {
res = (res * base) % MOD
}
base = (base * base) % MOD
exp /= 2
}
return res
}