from operator import add k,L,R = map(int,input().split()) a = [0]*61 for i in range(1,61): a[i] = 2*a[i-1]+len(str(i*i)) if k > 60 or a[k] < R: print(-1) exit() def s(k,x): v = 0 for i in str(k*k)[:x]: v += int(i) if i != "0" else 0 return v def p(k,x): v = 1 for i in str(k*k)[:x]: v *= int(i) if i != "0" else 0 return v def f(k,R): g = s if op==add else p if R <= 1: return max(R,0) if R == a[k]: return op(2*f(k-1,a[k-1]) if op==add else f(k-1,a[k-1])**2%MOD, g(k,9)) if R <= a[k-1]: return f(k-1,R) v = a[k-1] + len(str(k*k)) if R <= v: return op(f(k-1,a[k-1]), g(k,R-a[k-1])) else: return op(op(f(k-1,a[k-1]), g(k,9)), f(k-1,R-v)) MOD = 10**9+7 def mul(a,b): return a*b%MOD op = add print(f(k,R)-f(k,L-1), end=" ") op = mul print(f(k,R)*(pow(f(k,L-1),MOD-2,MOD) if L>1 else 1)%MOD)