← Home
For problem statement at 1000-1999/1400-1499/1440-1449/1446/problemB.txt this is a correct solution, but verifier at 1000-1999/1400-1499/1440-1449/1446/verifierB.go ends with All 105 tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func max(a, b int32) int32 {
	if a > b {
		return a
	}
	return b
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var n, m int
	fmt.Fscan(in, &n, &m)
	var A, B string
	fmt.Fscan(in, &A)
	fmt.Fscan(in, &B)
	AA := []byte(A)
	BB := []byte(B)
	const INF int32 = 1000000000
	total := (n + 1) * (m + 1) * 3 * 3
	dp := make([]int32, total)
	for i := 0; i < total; i++ {
		dp[i] = -INF
	}
	idx := func(i, j, s1, s2 int) int {
		return ((i*(m+1) + j)*3 + s1)*3 + s2
	}
	dp[idx(0, 0, 0, 0)] = 0
	for i := 0; i <= n; i++ {
		for j := 0; j <= m; j++ {
			for s1 := 0; s1 < 3; s1++ {
				for s2 := 0; s2 < 3; s2++ {
					k := idx(i, j, s1, s2)
					curr := dp[k]
					if curr == -INF {
						continue
					}
					if i < n {
						if s1 == 0 {
							kk := idx(i+1, j, 0, s2)
							dp[kk] = max(dp[kk], curr+0)
							kk = idx(i+1, j, 1, s2)
							dp[kk] = max(dp[kk], curr-1)
						} else if s1 == 1 {
							kk := idx(i+1, j, 1, s2)
							dp[kk] = max(dp[kk], curr-1)
							kk = idx(i+1, j, 2, s2)
							dp[kk] = max(dp[kk], curr+0)
						} else if s1 == 2 {
							kk := idx(i+1, j, 2, s2)
							dp[kk] = max(dp[kk], curr+0)
						}
					}
					if j < m {
						if s2 == 0 {
							kk := idx(i, j+1, s1, 0)
							dp[kk] = max(dp[kk], curr+0)
							kk = idx(i, j+1, s1, 1)
							dp[kk] = max(dp[kk], curr-1)
						} else if s2 == 1 {
							kk := idx(i, j+1, s1, 1)
							dp[kk] = max(dp[kk], curr-1)
							kk = idx(i, j+1, s1, 2)
							dp[kk] = max(dp[kk], curr+0)
						} else if s2 == 2 {
							kk := idx(i, j+1, s1, 2)
							dp[kk] = max(dp[kk], curr+0)
						}
					}
					if i < n && j < m && AA[i] == BB[j] {
						canA := (s1 == 0 || s1 == 1)
						canB := (s2 == 0 || s2 == 1)
						if canA && canB {
							ns1 := 1
							ns2 := 1
							kk := idx(i+1, j+1, ns1, ns2)
							dp[kk] = max(dp[kk], curr+2)
						}
					}
				}
			}
		}
	}
	var ans int32 = -INF
	for s1 := 0; s1 < 3; s1++ {
		for s2 := 0; s2 < 3; s2++ {
			ans = max(ans, dp[idx(n, m, s1, s2)])
		}
	}
	fmt.Println(ans)
}
```