← Home
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)
	}
}
```