package main import . "fmt" import . "math/rand" func main() { var n,k int64 Scan(&n,&k) ans := solve(n, k) Println(ans) } func solve(n, k int64) int64 { t := []int64{} m := []int64{1} for x := n; x > 0; x /= 10 { t = append(t, x%10+1) m = append(m, m[len(m)-1]*t[len(t)-1]) } var ans int64 k-- for i:=len(t)-1; i >= 0; i-- { ans *= 10 for j := int64(1); j <= t[i]; j++ { if j*m[i] > k { k -= (j-1)*m[i] ans += (j-1) break } } } return ans } func init() { for n := int64(0); n <= 1000; n++ { for k := int64(1); k <= n; k++ { ans := bruteforce(n, k) if ans < 0 { break } res := solve(n, k) if ans != res { panic(Sprintf("n=%d,k=%d,ans=%d,res=%d",n,k,ans,res)) } } } for i := 0; i < 500; i++ { n := int64(Intn(1e6)) x := int64(1) for e := n; e > 0; e /= 10 { x *= e%10+1 } k := int64(Intn(int(x))) if k==0 { k++ } ans := bruteforce(n, k) if ans < 0 { continue } res := solve(n, k) if ans != res { panic(Sprintf("n=%d,k=%d,ans=%d,res=%d",n,k,ans,res)) } } } func bruteforce(n, k int64) int64 { valid := func(ex, ts int64) bool { if ts > ex { return false } for ts > 0 && ex > 0 { if ts%10 > ex%10 { return false } ts /= 10 ex /= 10 } return ts <= ex } for i := int64(0); i <= n; i++ { if valid(n, i) { k-- if k == 0 { return i } } } return -1 }