''' LastEditTime: 2026-07-08 14:53:09 ''' from typing importList
N = 100000 MOD = 1000000007 pow = [1] * (N + 1) for i inrange(1, N + 1): pow[i] = pow[i - 1] * 10 % MOD
classSolution: defsumAndMultiply(self, s: str, queries: List[List[int]]) -> List[int]: n = len(s) sum = [0] * (n + 1) con = [0] * (n + 1) cnt1 = [0] * (n + 1) for i inrange(n): if s[i] == '0': sum[i + 1] = sum[i] con[i + 1] = con[i] cnt1[i + 1] = cnt1[i] else: v = ord(s[i]) - ord('0') sum[i + 1] = sum[i] + v con[i + 1] = (con[i] * 10 + v) % MOD cnt1[i + 1] = cnt1[i] + 1
ans = [0] * len(queries) for i, (l, r) inenumerate(queries): su = sum[r + 1] - sum[l] cn = (con[r + 1] - con[l] * pow[cnt1[r + 1] - cnt1[l]]) % MOD + MOD ans[i] = su * cn % MOD return ans
# if __name__ == "__main__": # s = "148" # a = [[0,0],[0,1],[0,2],[1,1],[1,2],[2,2]] # sol = Solution() # print(sol.sumAndMultiply(s, a)) # else: # print(1)
vector<int> ans; ans.reserve(queries.size()); for (vector<int>& q : queries) { int l = q[0], r = q[1] + 1; ll this_cnt = cnt[r] - cnt[l]; ll this_con = con[r] - con[l] * p[num1[r] - num1[l]] % MOD + MOD; ans.push_back(this_cnt * this_con % MOD); } return ans; } };
#ifdef _DEBUG /* 10203004 [[0,7],[1,3],[4,6]]
[12340,4,9] */ intmain(){ string a, b; while (cin >> a >> b) { vector<vector<int>> v = stringToVectorVector(b); Solution sol; vector<int> ans = sol.sumAndMultiply(a, v); debug_(ans); } return0; } #endif