#include<bits/stdc++.h>
using namespace std;
#define LEN 1000005
int base =10;
int power[LEN];
void init()
{
power[0]=1;
for(int i=1;i<LEN;i++) power[i]=power[i-1]*base;
}
void prefixHash(string s,vector<int> &ph)
{
int sum=0;
for(int i=0;i<s.size();i++)
{
sum*=base;
sum+=(s[i]-'0');
ph[i]=sum;
}
cout<<sum<<endl;
for(auto x:ph)cout<<x<<" ";
cout<<endl;
}
int calcHash(int l,int r,string s,vector<int> &ph)
{
if(l==0) return ph[r];
return ph[r]-ph[l-1]*power[r-l+1];
}
int main()
{
init();
string s="101245";
int n=s.size();
vector<int>ph(n);
int l=1,r=3;
//calcHash(l,r,s,ph);
prefixHash(s,ph);
cout<<endl;
cout<<calcHash(l,r,s,ph);
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBMRU4gMTAwMDAwNQppbnQgYmFzZSA9MTA7CgppbnQgcG93ZXJbTEVOXTsKCnZvaWQgaW5pdCgpCnsKICAgIHBvd2VyWzBdPTE7CiAgICBmb3IoaW50IGk9MTtpPExFTjtpKyspIHBvd2VyW2ldPXBvd2VyW2ktMV0qYmFzZTsKfQp2b2lkIHByZWZpeEhhc2goc3RyaW5nIHMsdmVjdG9yPGludD4gJnBoKQp7CgogICAgaW50IHN1bT0wOwogICAgZm9yKGludCBpPTA7aTxzLnNpemUoKTtpKyspCiAgICB7CiAgICAgICAgc3VtKj1iYXNlOwogICAgICAgIHN1bSs9KHNbaV0tJzAnKTsKICAgICAgICBwaFtpXT1zdW07CiAgICB9CiAgICBjb3V0PDxzdW08PGVuZGw7CiAgICBmb3IoYXV0byB4OnBoKWNvdXQ8PHg8PCIgIjsKICAgIGNvdXQ8PGVuZGw7Cgp9CmludCBjYWxjSGFzaChpbnQgbCxpbnQgcixzdHJpbmcgcyx2ZWN0b3I8aW50PiAmcGgpCnsKICAgIGlmKGw9PTApIHJldHVybiBwaFtyXTsKICAgcmV0dXJuIHBoW3JdLXBoW2wtMV0qcG93ZXJbci1sKzFdOwp9CmludCBtYWluKCkKewogICAgaW5pdCgpOwogICAgc3RyaW5nIHM9IjEwMTI0NSI7CiAgICAgICAgaW50IG49cy5zaXplKCk7CiAgICB2ZWN0b3I8aW50PnBoKG4pOwoKICAgIGludCBsPTEscj0zOwogICAgLy9jYWxjSGFzaChsLHIscyxwaCk7CiAgICBwcmVmaXhIYXNoKHMscGgpOwogICAgICAgIGNvdXQ8PGVuZGw7CgogICAgY291dDw8Y2FsY0hhc2gobCxyLHMscGgpOwp9Cg==