← Home
For problem statement at 0-999/400-499/400-409/401/problemD.txt this is a correct solution, but verifier at 0-999/400-499/400-409/401/verifierD.go ends with All tests passed can you fix the verifier? ```go
package main

import (
	"fmt"
	"sort"
)

func main() {
	var n int64
	var m int
	fmt.Scan(&n, &m)

	// Convert n to digits
	s := fmt.Sprintf("%d", n)
	digits := make([]int, len(s))
	for i, c := range s {
		digits[i] = int(c - '0')
	}

	sort.Ints(digits)

	k := len(digits)
	// dp[mask][remainder] = number of ways
	// mask is bitmask of used digits
	total := 1 << k
	dp := make([][]int64, total)
	for i := range dp {
		dp[i] = make([]int64, m)
	}

	// We'll track (mask, remainder)
	// Start: no digit placed, remainder 0
	// For each state, try adding a new digit

	// Initial state: empty number (mask=0, rem=0, no leading zero issue yet)
	// We'll handle leading zeros separately

	// dp[mask][rem] = count of numbers using digits in mask with remainder rem
	// Start with dp[0][0] = 1 (empty)
	dp[0][0] = 1

	for mask := 0; mask < total; mask++ {
		for rem := 0; rem < m; rem++ {
			if dp[mask][rem] == 0 {
				continue
			}
			// Count bits set in mask
			bitsSet := 0
			for i := 0; i < k; i++ {
				if mask&(1<<i) != 0 {
					bitsSet++
				}
			}
			// Try adding each unused digit
			// To avoid counting duplicates, track which digit values we've used at this position
			usedDigit := make(map[int]bool)
			for i := 0; i < k; i++ {
				if mask&(1<<i) != 0 {
					continue
				}
				d := digits[i]
				if usedDigit[d] {
					continue
				}
				// Check leading zero: if no digits placed yet (bitsSet == 0) and d == 0, skip
				if bitsSet == 0 && d == 0 {
					usedDigit[d] = true
					continue
				}
				usedDigit[d] = true
				newMask := mask | (1 << i)
				newRem := (rem*10 + d) % m
				dp[newMask][newRem] += dp[mask][rem]
			}
		}
	}

	fullMask := total - 1
	fmt.Println(dp[fullMask][0])
}
```