#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);
if(left == val[c - 'a'].end() || *left > r){
return make_pair(-1, -1);
}
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);
if(left == val[c - 'a'].end() || *left > r){
return -1;
}
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 *right1;
};
for (int i = 0, j = 0; i < qt.size(); ++i) {
while(j < upd.size() && qt[i].v - 1 >= j){
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] = min(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+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKdGVtcGxhdGU8Y2xhc3MgVD4KdXNpbmcgb3JkZXJlZF9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47Cgpjb25zdCBpbnQgTiA9IDFlNiArIDEwOwpjb25zdCBsb25nIGxvbmcgbWQgPSAxZTkgKyA3OwoKY29uc3QgaW50IEluZiA9IDFlOTsKc3RydWN0IHF1ZXJpZXN7CiAgICBpbnQgdiwgbCwgciwgazsKICAgIGNoYXIgYywgZDsKICAgIGludCBpZHg7CiAgICBib29sIG9wZXJhdG9yIDwoY29uc3QgcXVlcmllcyYgb3RoZXIpewogICAgICAgIHJldHVybiB0aGlzLT52IDwgb3RoZXIudjsKICAgIH0KfTsKc3RydWN0IHVwZGF0ZXsKICAgIGludCBpOwogICAgY2hhciB4OyBpbnQgaWR4Owp9Owp2b2lkIHNvbCgpIHsKICAgIHN0cmluZyBzOyBjaW4gPj4gczsKICAgIGludCBuID0gcy5zaXplKCksIHE7IGNpbiA+PiBxOwogICAgdmVjdG9yPG9yZGVyZWRfc2V0PGludD4+IHZhbCgyNik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIHZhbFtzW2ldIC0gJ2EnXS5pbnNlcnQoaSk7CiAgICB9CiAgICB2ZWN0b3I8cXVlcmllcz4gcXQ7CiAgICB2ZWN0b3I8dXBkYXRlPiB1cGQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7ICsraSkgewogICAgICAgIGludCB0OyBjaW4gPj4gdDsKICAgICAgICBpZih0ID09IDEpewogICAgICAgICAgICBpbnQgajsgY2hhciBrOyBjaW4gPj4gaiA+PiBrOwogICAgICAgICAgICB1cGQucHVzaF9iYWNrKHtqIC0gMSwgaywgaX0pOwogICAgICAgIH0gZWxzZXsKICAgICAgICAgICAgaW50IHYsIGwsIHIsIGs7IGNpbiA+PiB2ID4+IGwgPj4gciA+PiBrOyAtLWwsIC0tcjsKICAgICAgICAgICAgY2hhciBjLCBkOyBjaW4gPj4gYyA+PiBkOwogICAgICAgICAgICBxdC5wdXNoX2JhY2soe3YsbCxyLCBrLCBjLGQsIGl9KTsKICAgICAgICB9CiAgICB9CiAgICBzb3J0KGFsbChxdCkpOwogICAgdmVjdG9yPGludD4gcmVzKHEsIC0xKTsKICAgIGZ1bmN0aW9uPHZvaWQodXBkYXRlKT4gZ29fdXBkID0gWyZdICh1cGRhdGUgY3Vycil7CiAgICAgICAgdmFsW3NbY3Vyci5pXSAtICdhJ10uZXJhc2UoY3Vyci5pKTsKICAgICAgICBzW2N1cnIuaV0gPSBjdXJyLng7CiAgICAgICAgdmFsW3NbY3Vyci5pXSAtICdhJ10uaW5zZXJ0KGN1cnIuaSk7CiAgICB9OwogICAgZnVuY3Rpb248cGFpcjxpbnQsIGludD4oaW50LCBpbnQsIGludCwgY2hhcik+IGdvX2xlZnQgPSBbJl0gKGludCBsLCBpbnQgciwgaW50IGssIGNoYXIgYyl7CiAgICAgICAgaWYodmFsW2MgLSAnYSddLnNpemUoKSA8IGspIHJldHVybiBtYWtlX3BhaXIoLTEsIC0xKTsKICAgICAgICBhdXRvIGxlZnQgPSB2YWxbYyAtICdhJ10ubG93ZXJfYm91bmQobCk7CiAgICAgICAgaWYobGVmdCA9PSB2YWxbYyAtICdhJ10uZW5kKCkgfHwgKmxlZnQgPiByKXsKICAgICAgICAgICAgcmV0dXJuIG1ha2VfcGFpcigtMSwgLTEpOwogICAgICAgIH0KICAgICAgICBpbnQgb3V0X3JhbmdlID0gdmFsW2MgLSAnYSddLm9yZGVyX29mX2tleSgqbGVmdCk7CiAgICAgICAgYXV0byByaWdodCA9IHZhbFtjIC0gJ2EnXS51cHBlcl9ib3VuZChyKTsKICAgICAgICBpbnQgaW5fcmFuZ2UgPSB2YWxbYyAtICdhJ10ub3JkZXJfb2Zfa2V5KCpyaWdodCkgLSBvdXRfcmFuZ2U7CiAgICAgICAgaWYoaW5fcmFuZ2UgPCBrKSByZXR1cm4gbWFrZV9wYWlyKC0xLCAtMSk7CiAgICAgICAgcmlnaHQgPSB2YWxbYyAtICdhJ10uZmluZF9ieV9vcmRlcihrICsgb3V0X3JhbmdlIC0gMSk7CiAgICAgICAgcGFpcjxpbnQsIGludD4gYW5zOwogICAgICAgIGFucy5maXJzdCA9ICpyaWdodDsKICAgICAgICBhbnMuc2Vjb25kID0gKigrK3JpZ2h0KSAtIDE7CiAgICAgICAgcmV0dXJuIGFuczsKICAgIH07CiAgICBmdW5jdGlvbjxpbnQoaW50LCBpbnQsIGludCwgY2hhcik+IGdvX3JpZ2h0ID0gWyZdIChpbnQgbCwgaW50IHIsIGludCBrLCBjaGFyIGMpewogICAgICAgIGlmKHZhbFtjIC0gJ2EnXS5zaXplKCkgPCBrKSByZXR1cm4gLTE7CiAgICAgICAgYXV0byByaWdodCA9IHZhbFtjIC0gJ2EnXS51cHBlcl9ib3VuZChyKTsKICAgICAgICBhdXRvIGxlZnQgPSB2YWxbYyAtICdhJ10ubG93ZXJfYm91bmQobCk7CiAgICAgICAgaWYobGVmdCA9PSB2YWxbYyAtICdhJ10uZW5kKCkgfHwgKmxlZnQgPiByKXsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICBpbnQgdyA9IHZhbFtjIC0gJ2EnXS5vcmRlcl9vZl9rZXkoKnJpZ2h0KTsKICAgICAgICBpbnQgaW5fcmFuZ2UgPSB3IC0gdmFsW2MgLSAnYSddLm9yZGVyX29mX2tleSgqbGVmdCk7CiAgICAgICAgaWYoaW5fcmFuZ2UgPCBrKSByZXR1cm4gLTE7CiAgICAgICAgLS1yaWdodDsKICAgICAgICAtLXc7CiAgICAgICAgYXV0byByaWdodDEgPSB2YWxbYyAtICdhJ10uZmluZF9ieV9vcmRlcih3ICsgMSAtIGspOwogICAgICAgIHJldHVybiAqcmlnaHQxOwogICAgfTsKICAgIGZvciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IHF0LnNpemUoKTsgKytpKSB7CiAgICAgICAgd2hpbGUoaiA8IHVwZC5zaXplKCkgJiYgcXRbaV0udiAtIDEgPj0gail7CiAgICAgICAgICAgIGdvX3VwZCh1cGRbal0pOwogICAgICAgICAgICArK2o7CiAgICAgICAgfQogICAgICAgIGF1dG8gW3YsIGwsIHIsIGssIGMsZCwgaWR4XSA9IHF0W2ldOwogICAgICAgIHBhaXI8aW50LCBpbnQ+IGxlZnQgPSBnb19sZWZ0KGwsIHIsIGssIGMpOwogICAgICAgIGludCByaWdodCA9IGdvX3JpZ2h0KGwsIHIsIGssIGQpOwogICAgICAgIGlmKGxlZnQuZmlyc3QgPT0gLTEgfHwgcmlnaHQgPT0gLTEgfHwgcmlnaHQgPD0gbGVmdC5maXJzdCl7CiAgICAgICAgICAgIHJlc1tpZHhdID0gMDsKICAgICAgICB9IGVsc2V7CiAgICAgICAgICAgIHJlc1tpZHhdID0gIG1pbihsZWZ0LnNlY29uZCAtIGxlZnQuZmlyc3QgKyAxLCByaWdodCAtIGxlZnQuZmlyc3QpOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7ICsraSkgewogICAgICAgIGlmKHJlc1tpXSA9PSAtMSkgY29udGludWU7CiAgICAgICAgY291dCA8PCByZXNbaV0gPDwgJ1xuJzsKICAgIH0KCn0Kc2lnbmVkIG1haW4oKSB7CgogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgaW50IHQgPSAxOwovLyAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2woKTsKICAgIH0KCn0=