N = gets.to_i cnt1 = cnt2 = 0 MOD1 = 10**9 MOD2 = MOD1 + 7 digits = Math.log10(N+1).ceil digits.times.each{|d| v = 10 ** (d / 2) * 9 cnt1 = (cnt1 + v) % MOD1 cnt2 = (cnt2 + v) % MOD2 } M = 10 ** digits # p [M, N, cnt1] M.downto(N+1){|i| next if i.to_s != i.to_s.reverse cnt1 -= 1 cnt2 -= 1 } p cnt1 p cnt2