#include <bits/stdc++.h>
using namespace std;
#define LEN 1000000
int power[LEN];
int base = 10;

void init()
{
    power[0] = 1;
    for (int i = 1; i < LEN; i++)
    {
        power[i] = power[i - 1] * base;
    }
}

void prefixHash(string str, vector<int> &ph)
{
    int n = str.size();
    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        sum *= base;
        sum += (str[i] - '0');
        ph[i] = sum;
    }
    cout << sum << "\n";
    for (int num : ph)
    {
        cout << num << " ";
    }
}

int calcHash(int l, int r, vector<int> &ph)
{
    if (l == 0)
        return ph[r];
    return ph[r] - ph[l - 1] * power[r - l + 1];
}

int main()
{
    string str = "101245";

    int n = str.size();

    vector<int> ph(n);

    int l = 2  , r = 3;

    init();
    prefixHash(str, ph);
    cout << "\n";
    cout << "Calculated Hash: " << calcHash(l, r, ph) << endl;

    return 0;
}
