package main import . "fmt" import . "slices" // いろいろ実験した結果 // 10進数の桁ごとに余りを見る // つまり 10^k % 120 をすると (k >= 0) // k=0 は 1 // k=1 は 10 // k=2 は 100 // k>=3 は 40 // よって、下位3桁のみ気にすればよいかんじ? func main() { var n int var s string Scan(&n, &s) t := make([]int, 10) for _, c := range s { t[int(c)-'0']++ } ans := map[int]bool{} if n < 4 { for i := 1; i < 1e4; i++ { w := make([]int, 10) for _, c := range Sprint(i) { w[int(c)-'0']++ } if Equal(t, w) { ans[i%120] = true } } Println(len(ans)) return } sum := 0 for i := 1; i <= 9; i++ { sum += 40*i*t[i] } for i := 1; i <= 9; i++ { if t[i] == 0 { continue } t[i]-- for j := 1; j <= 9; j++ { if t[j] == 0 { continue } t[j]-- for k := 1; k <= 9; k++ { if t[k] == 0 { continue } t[k]-- p := i+10*j+100*k - 40*(i+j+k) ans[(p+sum)%120] = true t[k]++ } t[j]++ } t[i]++ } Println(len(ans)) }