#include <bits/stdc++.h>
//#define int long long
#define all(v) v.begin(),v.end()
using namespace std;
#define ll long long
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template<class T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
const int N = 1e6 + 10;
const long long md = 1e9 + 7;
const int Inf = 1e9;
struct queries{
int v, l, r, k;
char c, d;
int idx;
bool operator <(const queries& other){
return this->v < other.v;
}
};
struct update{
int i;
char x; int idx;
};
void sol() {
string s; cin >> s;
int n = s.size(), q; cin >> q;
vector<ordered_set<int>> val(26);
for (int i = 0; i < n; ++i) {
val[s[i] - 'a'].insert(i);
}
vector<queries> qt;
vector<update> upd;
for (int i = 0; i < q; ++i) {
int t; cin >> t;
if(t == 1){
int j; char k; cin >> j >> k;
upd.push_back({j - 1, k, i});
} else{
int v, l, r, k; cin >> v >> l >> r >> k; --l, --r;
char c, d; cin >> c >> d;
qt.push_back({v,l,r, k, c,d, i});
}
}
sort(all(qt));
vector<int> res(q, -1);
function<void(update)> go_upd = [&] (update curr){
val[s[curr.i] - 'a'].erase(curr.i);
s[curr.i] = curr.x;
val[s[curr.i] - 'a'].insert(curr.i);
};
function<pair<int, int>(int, int, int, char)> go_left = [&] (int l, int r, int k, char c){
if(val[c - 'a'].size() < k) return make_pair(-1, -1);
auto left = val[c - 'a'].lower_bound(l);
int out_range = val[c - 'a'].order_of_key(*left);
auto right = val[c - 'a'].upper_bound(r);
int in_range = val[c - 'a'].order_of_key(*right) - out_range;
if(in_range < k) return make_pair(-1, -1);
right = val[c - 'a'].find_by_order(k + out_range - 1);
pair<int, int> ans;
ans.first = *right;
ans.second = *(++right) - 1;
return ans;
};
function<int(int, int, int, char)> go_right = [&] (int l, int r, int k, char c){
if(val[c - 'a'].size() < k) return -1;
auto right = val[c - 'a'].upper_bound(r);
auto left = val[c - 'a'].lower_bound(l);
int w = val[c - 'a'].order_of_key(*right);
int in_range = w - val[c - 'a'].order_of_key(*left);
if(in_range < k) return -1;
--right;
--w;
auto right1 = val[c - 'a'].find_by_order(w + 1 - k);
return *right;
};
for (int i = 0, j = 0; i < qt.size(); ++i) {
while(j < upd.size() && qt[i].v >= j - 1){
go_upd(upd[j]);
++j;
}
auto [v, l, r, k, c,d, idx] = qt[i];
pair<int, int> left = go_left(l, r, k, c);
int right = go_right(l, r, k, d);
if(left.first == -1 || right == -1 || right <= left.first){
res[idx] = 0;
} else{
res[idx] = max(left.second - left.first + 1, right - left.first);
}
}
for (int i = 0; i < q; ++i) {
if(res[i] == -1) continue;
cout << res[i] << '\n';
}
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t = 1;
// cin >> t;
while (t--) {
sol();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgovLyNkZWZpbmUgIGludCBsb25nIGxvbmcKI2RlZmluZSAgYWxsKHYpIHYuYmVnaW4oKSx2LmVuZCgpCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKdGVtcGxhdGU8Y2xhc3MgVD4KdXNpbmcgb3JkZXJlZF9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47Cgpjb25zdCBpbnQgTiA9IDFlNiArIDEwOwpjb25zdCBsb25nIGxvbmcgbWQgPSAxZTkgKyA3OwoKY29uc3QgaW50IEluZiA9IDFlOTsKc3RydWN0IHF1ZXJpZXN7CiAgICBpbnQgdiwgbCwgciwgazsKICAgIGNoYXIgYywgZDsKICAgIGludCBpZHg7CiAgICBib29sIG9wZXJhdG9yIDwoY29uc3QgcXVlcmllcyYgb3RoZXIpewogICAgICAgIHJldHVybiB0aGlzLT52IDwgb3RoZXIudjsKICAgIH0KfTsKc3RydWN0IHVwZGF0ZXsKICBpbnQgaTsKICBjaGFyIHg7IGludCBpZHg7Cn07CnZvaWQgc29sKCkgewogICAgc3RyaW5nIHM7IGNpbiA+PiBzOwogICAgaW50IG4gPSBzLnNpemUoKSwgcTsgY2luID4+IHE7CiAgICB2ZWN0b3I8b3JkZXJlZF9zZXQ8aW50Pj4gdmFsKDI2KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgdmFsW3NbaV0gLSAnYSddLmluc2VydChpKTsKICAgIH0KICAgIHZlY3RvcjxxdWVyaWVzPiBxdDsKICAgIHZlY3Rvcjx1cGRhdGU+IHVwZDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcTsgKytpKSB7CiAgICAgICAgaW50IHQ7IGNpbiA+PiB0OwogICAgICAgIGlmKHQgPT0gMSl7CiAgICAgICAgICAgIGludCBqOyBjaGFyIGs7IGNpbiA+PiBqID4+IGs7CiAgICAgICAgICAgIHVwZC5wdXNoX2JhY2soe2ogLSAxLCBrLCBpfSk7CiAgICAgICAgfSBlbHNlewogICAgICAgICAgICBpbnQgdiwgbCwgciwgazsgY2luID4+IHYgPj4gbCA+PiByID4+IGs7IC0tbCwgLS1yOwogICAgICAgICAgICBjaGFyIGMsIGQ7IGNpbiA+PiBjID4+IGQ7CiAgICAgICAgICAgIHF0LnB1c2hfYmFjayh7dixsLHIsIGssIGMsZCwgaX0pOwogICAgICAgIH0KICAgIH0KICAgIHNvcnQoYWxsKHF0KSk7CiAgICB2ZWN0b3I8aW50PiByZXMocSwgLTEpOwogICAgZnVuY3Rpb248dm9pZCh1cGRhdGUpPiBnb191cGQgPSBbJl0gKHVwZGF0ZSBjdXJyKXsKICAgICAgICB2YWxbc1tjdXJyLmldIC0gJ2EnXS5lcmFzZShjdXJyLmkpOwogICAgICAgIHNbY3Vyci5pXSA9IGN1cnIueDsKICAgICAgICB2YWxbc1tjdXJyLmldIC0gJ2EnXS5pbnNlcnQoY3Vyci5pKTsKICAgIH07CiAgICBmdW5jdGlvbjxwYWlyPGludCwgaW50PihpbnQsIGludCwgaW50LCBjaGFyKT4gZ29fbGVmdCA9IFsmXSAoaW50IGwsIGludCByLCBpbnQgaywgY2hhciBjKXsKICAgICAgICBpZih2YWxbYyAtICdhJ10uc2l6ZSgpIDwgaykgcmV0dXJuIG1ha2VfcGFpcigtMSwgLTEpOwogICAgICAgIGF1dG8gbGVmdCA9IHZhbFtjIC0gJ2EnXS5sb3dlcl9ib3VuZChsKTsKICAgICAgICBpbnQgb3V0X3JhbmdlID0gdmFsW2MgLSAnYSddLm9yZGVyX29mX2tleSgqbGVmdCk7CiAgICAgICAgYXV0byByaWdodCA9IHZhbFtjIC0gJ2EnXS51cHBlcl9ib3VuZChyKTsKICAgICAgICBpbnQgaW5fcmFuZ2UgPSB2YWxbYyAtICdhJ10ub3JkZXJfb2Zfa2V5KCpyaWdodCkgLSBvdXRfcmFuZ2U7CiAgICAgICAgaWYoaW5fcmFuZ2UgPCBrKSByZXR1cm4gbWFrZV9wYWlyKC0xLCAtMSk7CiAgICAgICAgcmlnaHQgPSB2YWxbYyAtICdhJ10uZmluZF9ieV9vcmRlcihrICsgb3V0X3JhbmdlIC0gMSk7CiAgICAgICAgcGFpcjxpbnQsIGludD4gYW5zOwogICAgICAgIGFucy5maXJzdCA9ICpyaWdodDsKICAgICAgICBhbnMuc2Vjb25kID0gKigrK3JpZ2h0KSAtIDE7CiAgICAgICAgcmV0dXJuIGFuczsKICAgIH07CiAgICBmdW5jdGlvbjxpbnQoaW50LCBpbnQsIGludCwgY2hhcik+IGdvX3JpZ2h0ID0gWyZdIChpbnQgbCwgaW50IHIsIGludCBrLCBjaGFyIGMpewogICAgICAgIGlmKHZhbFtjIC0gJ2EnXS5zaXplKCkgPCBrKSByZXR1cm4gLTE7CiAgICAgICAgYXV0byByaWdodCA9IHZhbFtjIC0gJ2EnXS51cHBlcl9ib3VuZChyKTsKICAgICAgICBhdXRvIGxlZnQgPSB2YWxbYyAtICdhJ10ubG93ZXJfYm91bmQobCk7CiAgICAgICAgaW50IHcgPSB2YWxbYyAtICdhJ10ub3JkZXJfb2Zfa2V5KCpyaWdodCk7CiAgICAgICAgaW50IGluX3JhbmdlID0gdyAtIHZhbFtjIC0gJ2EnXS5vcmRlcl9vZl9rZXkoKmxlZnQpOwogICAgICAgIGlmKGluX3JhbmdlIDwgaykgcmV0dXJuIC0xOwogICAgICAgIC0tcmlnaHQ7CiAgICAgICAgLS13OwogICAgICAgIGF1dG8gcmlnaHQxID0gdmFsW2MgLSAnYSddLmZpbmRfYnlfb3JkZXIodyArIDEgLSBrKTsKICAgICAgICByZXR1cm4gKnJpZ2h0OwogICAgfTsKICAgIGZvciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IHF0LnNpemUoKTsgKytpKSB7CiAgICAgICAgd2hpbGUoaiA8IHVwZC5zaXplKCkgJiYgcXRbaV0udiA+PSBqIC0gMSl7CiAgICAgICAgICAgIGdvX3VwZCh1cGRbal0pOwogICAgICAgICAgICArK2o7CiAgICAgICAgfQogICAgICAgIGF1dG8gW3YsIGwsIHIsIGssIGMsZCwgaWR4XSA9IHF0W2ldOwogICAgICAgIHBhaXI8aW50LCBpbnQ+IGxlZnQgPSBnb19sZWZ0KGwsIHIsIGssIGMpOwogICAgICAgIGludCByaWdodCA9IGdvX3JpZ2h0KGwsIHIsIGssIGQpOwogICAgICAgIGlmKGxlZnQuZmlyc3QgPT0gLTEgfHwgcmlnaHQgPT0gLTEgfHwgcmlnaHQgPD0gbGVmdC5maXJzdCl7CiAgICAgICAgICAgIHJlc1tpZHhdID0gMDsKICAgICAgICB9IGVsc2V7CiAgICAgICAgICAgIHJlc1tpZHhdID0gIG1heChsZWZ0LnNlY29uZCAtIGxlZnQuZmlyc3QgKyAxLCByaWdodCAtIGxlZnQuZmlyc3QpOwogICAgICAgIH0KICAgIH0gCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7ICsraSkgewogICAgICAgIGlmKHJlc1tpXSA9PSAtMSkgY29udGludWU7CiAgICAgICAgY291dCA8PCByZXNbaV0gPDwgJ1xuJzsKICAgIH0KfQpzaWduZWQgbWFpbigpIHsKCiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBpbnQgdCA9IDE7Ci8vICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbCgpOwogICAgfQoKfQ==