#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int MOD = 1007050321;
const int N = 1e5 + 5;
int n, q;
string s;
int pow2[N];
void precompute() {
pow2[0] = 1;
for (int i = 1; i <= n; i++) pow2[i] = 1ll * pow2[i - 1] * 2 % MOD;
}
struct Node {
int len = 0;
int val = 0;
Node() {}
Node(char c) {
len = 1;
val = c - '0';
}
Node operator+(const Node& other) const {
Node ans;
ans.len = len + other.len;
ans.val = (1ll * val * pow2[other.len] + other.val) % MOD;
return ans;
}
};
Node seg[4 * N];
void build(int id, int l, int r) {
if (l == r) {
seg[id] = Node(s[l]);
return;
}
int mid = (l + r) >> 1;
build(id * 2, l, mid);
build(id * 2 + 1, mid + 1, r);
seg[id] = seg[id * 2] + seg[id * 2 + 1];
}
int findKth(int id, int l, int r, int k) {
if (l == r) return l;
int mid = (l + r) >> 1;
if (k <= seg[id * 2].len) {
return findKth(id * 2, l, mid, k);
}
return findKth(id * 2 + 1, mid + 1, r, k - seg[id * 2].len);
}
void update(int id, int l, int r, int pos) {
if (l > pos || r < pos) return;
if (l == r) {
seg[id] = Node();
return;
}
int mid = (l + r) >> 1;
update(id * 2, l, mid, pos);
update(id * 2 + 1, mid + 1, r, pos);
seg[id] = seg[id * 2] + seg[id * 2 + 1];
}
Node get(int id, int l, int r, int u, int v) {
if (l > v || r < u) return Node();
if (u <= l && r <= v) return seg[id];
int mid = (l + r) >> 1;
return get(id * 2, l, mid, u, v) + get(id * 2 + 1, mid + 1, r, u, v);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> s;
n = s.size();
s = ' ' + s;
precompute();
build(1, 1, n);
cin >> q;
while (q--) {
char type; cin >> type;
if (type == '-') {
int pos; cin >> pos;
pos = findKth(1, 1, n, pos);
update(1, 1, n, pos);
}
else {
int l, r;
cin >> l >> r;
l = findKth(1, 1, n, l), r = findKth(1, 1, n, r);
cout << get(1, 1, n, l, r).val << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTU9EID0gMTAwNzA1MDMyMTsgCmNvbnN0IGludCBOID0gMWU1ICsgNTsgCgppbnQgbiwgcTsgCnN0cmluZyBzOyAKaW50IHBvdzJbTl07IAoKdm9pZCBwcmVjb21wdXRlKCkgewoJcG93MlswXSA9IDE7ICAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgcG93MltpXSA9IDFsbCAqIHBvdzJbaSAtIDFdICogMiAlIE1PRDsKfQoKc3RydWN0IE5vZGUgewoJaW50IGxlbiA9IDA7IAoJaW50IHZhbCA9IDA7IAoKCU5vZGUoKSB7fQoKCU5vZGUoY2hhciBjKSB7CgkJbGVuID0gMTsgIAoJCXZhbCA9IGMgLSAnMCc7IAoJfQoKCU5vZGUgb3BlcmF0b3IrKGNvbnN0IE5vZGUmIG90aGVyKSBjb25zdCB7CgkJTm9kZSBhbnM7IAoJCWFucy5sZW4gPSBsZW4gKyBvdGhlci5sZW47IAoJCWFucy52YWwgPSAoMWxsICogdmFsICogcG93MltvdGhlci5sZW5dICsgb3RoZXIudmFsKSAlIE1PRDsgCgkJcmV0dXJuIGFuczsgCgl9Cn07IAoKTm9kZSBzZWdbNCAqIE5dOwoKdm9pZCBidWlsZChpbnQgaWQsIGludCBsLCBpbnQgcikgewoJaWYgKGwgPT0gcikgewoJCXNlZ1tpZF0gPSBOb2RlKHNbbF0pOyAKCQlyZXR1cm47IAoJfQoJaW50IG1pZCA9IChsICsgcikgPj4gMTsgCglidWlsZChpZCAqIDIsIGwsIG1pZCk7IAoJYnVpbGQoaWQgKiAyICsgMSwgbWlkICsgMSwgcik7IAoJc2VnW2lkXSA9IHNlZ1tpZCAqIDJdICsgc2VnW2lkICogMiArIDFdOyAKfQoKaW50IGZpbmRLdGgoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCBrKSB7CglpZiAobCA9PSByKSByZXR1cm4gbDsgIAoJaW50IG1pZCA9IChsICsgcikgPj4gMTsgCglpZiAoayA8PSBzZWdbaWQgKiAyXS5sZW4pIHsKCQlyZXR1cm4gZmluZEt0aChpZCAqIDIsIGwsIG1pZCwgayk7IAoJfQoJcmV0dXJuIGZpbmRLdGgoaWQgKiAyICsgMSwgbWlkICsgMSwgciwgayAtIHNlZ1tpZCAqIDJdLmxlbik7IAp9Cgp2b2lkIHVwZGF0ZShpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHBvcykgewoJaWYgKGwgPiBwb3MgfHwgciA8IHBvcykgcmV0dXJuOyAKCglpZiAobCA9PSByKSB7CgkJc2VnW2lkXSA9IE5vZGUoKTsgCgkJcmV0dXJuOyAKCX0KCglpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCXVwZGF0ZShpZCAqIDIsIGwsIG1pZCwgcG9zKTsgCgl1cGRhdGUoaWQgKiAyICsgMSwgbWlkICsgMSwgciwgcG9zKTsgCgoJc2VnW2lkXSA9IHNlZ1tpZCAqIDJdICsgc2VnW2lkICogMiArIDFdOyAKfQoKTm9kZSBnZXQoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikgewoJaWYgKGwgPiB2IHx8IHIgPCB1KSByZXR1cm4gTm9kZSgpOyAgCgoJaWYgKHUgPD0gbCAmJiByIDw9IHYpIHJldHVybiBzZWdbaWRdOyAKCglpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCXJldHVybiBnZXQoaWQgKiAyLCBsLCBtaWQsIHUsIHYpICsgZ2V0KGlkICogMiArIDEsIG1pZCArIDEsIHIsIHUsIHYpOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IHM7IAoJbiA9IHMuc2l6ZSgpOyAKCXMgPSAnICcgKyBzOyAgCgkKCXByZWNvbXB1dGUoKTsgIAoKCWJ1aWxkKDEsIDEsIG4pOyAgIAoKCWNpbiA+PiBxOyAKCgl3aGlsZSAocS0tKSB7CgkJY2hhciB0eXBlOyBjaW4gPj4gdHlwZTsgCgoJCWlmICh0eXBlID09ICctJykgewoJCQlpbnQgcG9zOyBjaW4gPj4gcG9zOyAKCQkJcG9zID0gZmluZEt0aCgxLCAxLCBuLCBwb3MpOyAKCQkJdXBkYXRlKDEsIDEsIG4sIHBvcyk7IAoJCX0KCQllbHNlIHsKCQkJaW50IGwsIHI7IAoJCQljaW4gPj4gbCA+PiByOyAKCQkJbCA9IGZpbmRLdGgoMSwgMSwgbiwgbCksIHIgPSBmaW5kS3RoKDEsIDEsIG4sIHIpOyAKCQkJY291dCA8PCBnZXQoMSwgMSwgbiwgbCwgcikudmFsIDw8ICdcbic7IAoJCX0KCX0KfQ==