#include <bits/stdc++.h> using namespace std; using ll=long long; #define int ll #define FOR(i,a,b) for(int i=int(a);i<int(b);i++) #define REP(i,b) FOR(i,0,b) #define MP make_pair #define PB push_back #define ALL(x) x.begin(),x.end() #define REACH cerr<<"reached line "<<__LINE__<<endl #define DBG(x) cerr<<"line "<<__LINE__<<" "<<#x<<":"<<x<<endl using pi=pair<int,int>; using vi=vector<int>; using ld=long double; template<class T,class U> ostream& operator<<(ostream& os,const pair<T,U>& p){ os<<"("<<p.first<<","<<p.second<<")"; return os; } template<class T> ostream& operator <<(ostream& os,const vector<T>& v){ os<<"["; REP(i,(int)v.size()){ if(i)os<<","; os<<v[i]; } os<<"]"; return os; } int read(){ int i; scanf("%lld",&i); return i; } void printSpace(){ printf(" "); } void printEoln(){ printf("\n"); } void print(int x,int suc=1){ printf("%lld",x); if(suc==1) printEoln(); if(suc==2) printSpace(); } string readString(){ static char buf[3341919]; scanf("%s",buf); return string(buf); } char* readCharArray(){ static char buf[3341919]; static int bufUsed=0; char* ret=buf+bufUsed; scanf("%s",ret); bufUsed+=strlen(ret)+1; return ret; } template<class T,class U> void chmax(T& a,U b){ if(a<b) a=b; } template<class T,class U> void chmin(T& a,U b){ if(a>b) a=b; } template<class T> T Sq(const T& t){ return t*t; } const int inf=LLONG_MAX/3; const int mod=1000000007; template<class T,class U> void add(T& a,U b){ a=((ll)a+b)%mod; } template<class T,class U> void sub(T& a,U b){ a=((ll)a-b%mod+mod)%mod; } template<class T,class U> void mult(T& a,U b){ a=((ll)a*b)%mod; } ll modPow(ll a,ll p){ ll s=1; REP(i,30){ if((p>>i)&1) mult(s,a); mult(a,a); } return s; } ll modInv(ll a){ return modPow(a,mod-2); } string sq[61]; int len[61],wa[61],sk[61]; pi GanbaruZoi(int lv,int l,int r){ if(r<=l)return pi(0,1); if(l==0&&r==len[lv]) return pi(wa[lv],sk[lv]); int x=len[lv-1],y=x+sq[lv].size(); pi a(0,1),b(0,1); if(l<x) a=GanbaruZoi(lv-1,l,min(r,x)); if(y<r) b=GanbaruZoi(lv-1,max(l,y)-y,r-y); int p=(a.first+b.first); int q=(a.second*b.second)%mod; FOR(i,max(x,l),min(y,r)){ int d=sq[lv][i-x]-'0'; if(!d)d=10; p+=d; mult(q,d); } return pi(p,q); } signed main(){ int k=min(read(),60LL),l=read()-1,r=read(); sk[0]=1; FOR(i,1,61){ int x=i*i; len[i]=len[i-1]*2; wa[i]=wa[i-1]*2; sk[i]=sk[i-1]*sk[i-1]%mod; while(x){ int d=x%10; if(!d)d=10; sq[i]+='0'+d; wa[i]+=d; mult(sk[i],d); len[i]++; x/=10; } reverse(ALL(sq[i])); } if(len[k]<r) cout<<-1<<endl; else{ pi ans=GanbaruZoi(k,l,r); cout<<ans.first<<" "<<ans.second<<endl; } }