← Home
For problem statement at 0-999/100-199/100-109/109/problemE.txt this is a correct solution, but verifier at 0-999/100-199/100-109/109/verifierE.go ends with All tests passed can you fix the verifier? ```go
package main

import (
	"fmt"
)

func lucky(x int64) int {
	if x == 0 {
		return 0
	}
	c := 0
	for x > 0 {
		d := x % 10
		if d == 4 || d == 7 {
			c++
		}
		x /= 10
	}
	return c
}

func lenOf(x int64) int {
	if x == 0 {
		return 1
	}
	c := 0
	for x > 0 {
		c++
		x /= 10
	}
	return c
}

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

func main() {
	var p10 [19]int64
	p10[0] = 1
	for i := 1; i <= 18; i++ {
		p10[i] = p10[i-1] * 10
	}

	var a, l int64
	if _, err := fmt.Scan(&a, &l); err != nil {
		return
	}

	var global_min_b uint64 = ^uint64(0)

	for k := 0; k <= 18; k++ {
		R := a % p10[k]
		A := a / p10[k]
		M := (R + l - 1) / p10[k]
		if M > 20 {
			continue
		}

		Tc := make([]int, M+1)
		for c := int64(0); c <= M; c++ {
			Tc[c] = lucky(A + c)
		}

		for D := 0; D <= 99; D++ {
			req0, req1 := -1, -1
			valid := true

			for c := int64(0); c <= M; c++ {
				val := int64(D) + c
				carry := int64(0)
				if val >= 100 {
					carry = 1
				}
				req := Tc[c] - lucky(val%100)
				if req < 0 {
					valid = false
					break
				}
				if carry == 0 {
					if req0 == -1 {
						req0 = req
					} else if req0 != req {
						valid = false
						break
					}
				} else {
					if req1 == -1 {
						req1 = req
					} else if req1 != req {
						valid = false
						break
					}
				}
			}

			if !valid {
				continue
			}

			req_diff := 999
			if req1 != -1 {
				req_diff = req1 - req0
				if req_diff != -1 && req_diff != 0 && req_diff != 1 {
					continue
				}
			}

			P_min := A / 100
			if P_min*100+int64(D) <= A {
				P_min++
			}

			var min_P int64 = -1
			var dfs func(int, int64, int, bool, int, int)
			dfs = func(idx int, current int64, luckyCount int, is_greater bool, last_non_nine int, L int) {
				if min_P != -1 || luckyCount > req0 || luckyCount+(L-idx) < req0 {
					return
				}
				if idx == L {
					if luckyCount == req0 {
						d := last_non_nine
						if d == -1 {
							d = 0
						}
						diff := 0
						if d == 3 || d == 6 {
							diff = 1
						} else if d == 4 || d == 7 {
							diff = -1
						}
						if req_diff == 999 || diff == req_diff {
							min_P = current
						}
					}
					return
				}
				extracted := int64(0)
				if L-1-idx < 19 && p10[L-1-idx] > 0 {
					extracted = (P_min / p10[L-1-idx]) % 10
				}
				min_d := int(extracted)
				if is_greater {
					min_d = 0
				}
				if idx == 0 && L > 1 && min_d == 0 && !is_greater {
					min_d = 1
				}
				for d := min_d; d <= 9; d++ {
					n_lucky := luckyCount
					if d == 4 || d == 7 {
						n_lucky++
					}
					n_last := last_non_nine
					if d != 9 {
						n_last = d
					}
					dfs(idx+1, current*10+int64(d), n_lucky, is_greater || (d > int(extracted)), n_last, L)
				}
			}

			P_opt := int64(-1)
			for L := max(1, lenOf(P_min)); L <= 18; L++ {
				min_P = -1
				dfs(0, 0, 0, false, -1, L)
				if min_P != -1 {
					P_opt = min_P
					break
				}
			}

			if P_opt != -1 {
				B := P_opt*100 + int64(D)
				max_B := (^uint64(0)) / uint64(p10[k])
				if uint64(B) <= max_B {
					b := uint64(B)*uint64(p10[k]) + uint64(R)
					if b < global_min_b {
						global_min_b = b
					}
				}
			}
		}
	}
	fmt.Println(global_min_b)
}
```