For problem statement at 1000-1999/1200-1299/1230-1239/1237/problemH.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1230-1239/1237/verifierH.go ends with wrong answer on test 3
input:3
1100 1100
01 01
0101 0101
expected:0
0
0 got:0
0
0
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func sw(x int) int {
if x == 1 {
return 2
}
if x == 2 {
return 1
}
return x
}
func pairCode(a, b byte) int {
if a == '0' {
if b == '0' {
return 0
}
return 1
}
if b == '0' {
return 2
}
return 3
}
func parsePairs(s string) []int {
m := len(s) / 2
res := make([]int, m)
for i := 0; i < m; i++ {
res[i] = pairCode(s[2*i], s[2*i+1])
}
return res
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var t int
fmt.Fscan(in, &t)
for ; t > 0; t-- {
var a, b string
fmt.Fscan(in, &a, &b)
n := len(a)
m := n / 2
pa := parsePairs(a)
pb := parsePairs(b)
ca := [3]int{}
cb := [3]int{}
for i := 0; i < m; i++ {
switch pa[i] {
case 0:
ca[0]++
case 3:
ca[2]++
default:
ca[1]++
}
switch pb[i] {
case 0:
cb[0]++
case 3:
cb[2]++
default:
cb[1]++
}
}
if ca != cb {
fmt.Fprintln(out, -1)
continue
}
ans := make([]int, 0, n+1)
flip := func(r int) {
for l, rr := 0, r-1; l < rr; l, rr = l+1, rr-1 {
pa[l], pa[rr] = sw(pa[rr]), sw(pa[l])
}
if r%2 == 1 {
pa[r/2] = sw(pa[r/2])
}
ans = append(ans, 2*r)
}
ok := true
for i := m; i >= 1 && ok; i-- {
tgt := pb[i-1]
if tgt == 0 || tgt == 3 {
k := 0
for j := i; j >= 1; j-- {
if pa[j-1] == tgt {
k = j
break
}
}
if k == 0 {
ok = false
break
}
if k < i {
if k == 1 {
flip(i)
} else {
flip(k)
flip(i)
}
}
} else {
k := 0
for j := i; j >= 1; j-- {
if pa[j-1] == tgt {
k = j
break
}
}
if k != 0 {
if k < i {
flip(k)
flip(i)
}
} else {
opp := sw(tgt)
k = 0
for j := 1; j <= i; j++ {
if pa[j-1] == opp {
k = j
break
}
}
if k == 0 {
ok = false
break
}
if k == 1 {
flip(i)
} else {
flip(k)
flip(1)
flip(i)
}
}
}
}
if ok {
for i := 0; i < m; i++ {
if pa[i] != pb[i] {
ok = false
break
}
}
}
if !ok || len(ans) > n+1 {
fmt.Fprintln(out, -1)
continue
}
fmt.Fprint(out, len(ans))
for _, x := range ans {
fmt.Fprint(out, " ", x)
}
fmt.Fprintln(out)
}
}