#include using namespace std; typedef long long LL; typedef __int128 INT; #define CIN_ONLY if(1) struct cww{cww(){ CIN_ONLY{ ios::sync_with_stdio(false);cin.tie(0); } }}star; #define fin "\n" #define FOR(i,bg,ed) for(int i=(bg);i<(ed);i++) #define REP(i,n) FOR(i,0,n) #define ALL(v) (v).begin(),(v).end() #define fi first #define se second #define pb push_back #define DEBUG if(0) #define REC(ret, ...) std::function template inline void chmin(T &l,T r){l=min(l,r);} template inline void chmax(T &l,T r){l=max(l,r);} template istream& operator>>(istream &is,vector &v){ for(auto &it:v)is>>it; return is; } const int mod=1e9+7; INT len1[100]; LL sum1[100]; LL mul1[100]; INT len2[100]; LL sum2[100]; LL mul2[100]; LL getsum(LL l){ int id=60; LL res=0; while(l>0){ while(l y; while(x){ int z=x%10; if(z==0)z=10; y.pb(z); x/=10; } reverse(ALL(y)); res=(res+sum1[id])%mod; REP(i,l-len1[id])res=(res+y[i])%mod; // cout<0){ while(l y; while(x){ int z=x%10; if(z==0)z=10; y.pb(z); x/=10; } reverse(ALL(y)); res=(res*mul1[id])%mod; REP(i,l-len1[id])res=(res*y[i])%mod; return res; } id--; } l-=len2[id]; res=(res*mul2[id])%mod; } return res; } // a x + b y = gcd(a, b) // O(log (a+b) ) LL extgcd(LL a, LL b, LL &x, LL &y) { LL g = a; x = 1; y = 0; if (b != 0) g = extgcd(b, a % b, y, x), y -= (a / b) * x; return g; } // mを法とするaの逆元 // O(log a) LL invMod(LL a) { LL x, y; if (extgcd(a, mod, x, y) == 1)return (x + mod) % mod; else return 0; // unsolvable } int main(){ len1[0]=0; sum1[0]=0; mul1[0]=1; FOR(i,1,61){ LL x=i*i; len1[i]=2*len1[i-1]+to_string(x).size(); mul1[i]=mul1[i-1]*mul1[i-1]%mod; sum1[i]=sum1[i-1]*2%mod; while(x>0){ LL y=x%10; if(y==0)y=10; mul1[i]=mul1[i]*y%mod; sum1[i]=(sum1[i]+y)%mod; x/=10; } } LL K,L,R; cin>>K>>L>>R; if(K>60)K=60; if(R>len1[K]){ cout<<-1<0){ LL y=x%10; if(y==0)y=10; mul2[i]=mul2[i]*y%mod; sum2[i]=(sum2[i]+y)%mod; x/=10; } } LL A=mod+getsum(R)-getsum(L-1); LL B=getmul(R); if(L!=1)B*=invMod(getmul(L-1)); cout<