def mod_str(s, mod): res = 0 for c in s: res = (res * 10 + int(c)) % mod return res def main(): import sys N = sys.stdin.read().strip() mod1 = 10**9 mod2 = 10**9 + 7 m = len(N) sum_mod1 = 0 sum_mod2 = 0 # Precompute for k < m for k in range(1, m): pow_val = (k - 1) // 2 # Compute for mod1 term_mod1 = (9 * pow(10, pow_val, mod1)) % mod1 sum_mod1 = (sum_mod1 + term_mod1) % mod1 # Compute for mod2 term_mod2 = (9 * pow(10, pow_val, mod2)) % mod2 sum_mod2 = (sum_mod2 + term_mod2) % mod2 # Process m-digit numbers prefix_len = (m + 1) // 2 prefix_str = N[:prefix_len] start_str = '1' + '0' * (prefix_len - 1) if prefix_str >= start_str: # Generate palindrome candidate if m % 2 == 0: pali_candidate = prefix_str + prefix_str[::-1] else: pali_candidate = prefix_str + prefix_str[:-1][::-1] add = 1 if pali_candidate <= N else 0 # Compute for mod1 a_mod1 = mod_str(prefix_str, mod1) b_mod1 = mod_str(start_str, mod1) current_mod1 = (a_mod1 - b_mod1 + add) % mod1 sum_mod1 = (sum_mod1 + current_mod1) % mod1 # Compute for mod2 a_mod2 = mod_str(prefix_str, mod2) b_mod2 = mod_str(start_str, mod2) current_mod2 = (a_mod2 - b_mod2 + add) % mod2 sum_mod2 = (sum_mod2 + current_mod2) % mod2 print(sum_mod1) print(sum_mod2) if __name__ == '__main__': main()