MOD = 10**9 + 7 def get_len(n): return len(str(n * n)) # Precompute S(n) for n up to a certain point where S(n) exceeds 1e18 max_n = 60 S = [0] * (max_n + 2) len_n2 = [0] * (max_n + 2) S[1] = 1 len_n2[1] = 1 # len(1^2) for k in range(2, max_n + 1): len_n2[k] = get_len(k) S[k] = 2 * S[k - 1] + len_n2[k] def get_S(n): # If n is larger than our precomputed max, assume S(n) is huge if n > max_n: return float('inf') return S[n] def find_k_th_digit(n, x): if x <= 0: return 0 # invalid while True: if n == 1: return 1 if x == 1 else -1 # Compute S(n-1) and len(n^2) sn_prev = get_S(n-1) if sn_prev == float('inf'): # if n-1 is beyond precomputed, check if x is in the mid part # but mid part is len(str(n*n)), so check if x is small enough to be in the mid current_len_n2 = get_len(n) if x <= current_len_n2: return int(str(n*n)[x-1]) else: # consider it as part of the prev structure, but since sn_prev is inf, we can't proceed # thus, decrease n n -= 1 continue len_mid = get_len(n) if x <= sn_prev: n -= 1 continue elif x <= sn_prev + len_mid: pos_in_mid = x - sn_prev return int(str(n*n)[pos_in_mid - 1]) else: x -= (sn_prev + len_mid) n -= 1 def compute_total_length(k): if k <= max_n: return S[k] return float('inf') def solve(): import sys K, L, R = map(int, sys.stdin.readline().split()) total_length = compute_total_length(K) if R > total_length: print(-1) return sum_val = 0 product_val = 1 for x in range(L, R + 1): digit = find_k_th_digit(K, x) if digit == -1: print(-1) return # Convert 0 to 10 for sum and product if digit == 0: sum_val += 10 product_val = (product_val * 10) % MOD else: sum_val += digit product_val = (product_val * digit) % MOD print(sum_val, product_val) if __name__ == '__main__': solve()