For problem statement at 0-999/0-99/40-49/40/problemD.txt this is a correct solution, but verifier at 0-999/0-99/40-49/40/verifierD.go ends with test 1 failed
expected:
YES
1
1
1
13
got:
YES
1
1
0
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"math/big"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var s string
if _, err := fmt.Fscan(in, &s); err != nil {
return
}
A := new(big.Int)
A.SetString(s, 10)
base := big.NewInt(12)
tmp := new(big.Int).Set(A)
digits := make([]int, 0)
for tmp.Sign() > 0 {
q := new(big.Int)
r := new(big.Int)
q.QuoRem(tmp, base, r)
digits = append(digits, int(r.Int64()))
tmp = q
}
if len(digits) == 0 {
digits = append(digits, 0)
}
nzPos := make([]int, 0, 2)
nzVal := make([]int, 0, 2)
for i, d := range digits {
if d != 0 {
nzPos = append(nzPos, i)
nzVal = append(nzVal, d)
}
}
yes := false
year := 0
if len(nzPos) == 1 && nzVal[0] == 2 {
year = 2*nzPos[0] + 1
yes = true
} else if len(nzPos) == 2 && nzVal[0] == 1 && nzVal[1] == 1 {
year = nzPos[0] + nzPos[1] + 1
yes = true
}
if !yes {
fmt.Fprintln(out, "NO")
return
}
sExp := year - 1
pow12 := make([]*big.Int, sExp+1)
pow12[0] = big.NewInt(1)
for i := 1; i <= sExp; i++ {
pow12[i] = new(big.Int).Mul(pow12[i-1], base)
}
values := make([]string, 0)
for q := sExp / 2; q >= 0; q-- {
p := sExp - q
v := new(big.Int).Add(pow12[p], pow12[q])
if v.Cmp(A) != 0 {
values = append(values, v.String())
}
}
fmt.Fprintln(out, "YES")
fmt.Fprintln(out, 1)
fmt.Fprintln(out, year)
fmt.Fprintln(out, len(values))
for _, v := range values {
fmt.Fprintln(out, v)
}
}
```