#include <bits/stdc++.h>
using namespace std;
struct node{
int frequency[27] ;
char replaced ;
};
int N, Q, odd, type;
string inp ;
node ST[380000] ;
node empty_node ;
inline void combine(int pos){
for (int i = 0; i < 27; i++)
ST[pos].frequency[i] = ST[2*pos+1].frequency[i] + ST[2*pos+2].frequency[i] ;
}
inline void build(int low, int high, int pos){
if(low==high){
ST[pos].frequency[inp[low] - 'a'] += 1 ;
ST[pos].replaced = inp[low] ;
return;
}
int mid = (low + high) / 2 ;
build(low, mid, 2*pos+1) ;
build(mid+1, high, 2*pos+2) ;
combine(pos) ;
}
inline void update(int idx, int low, int high, int pos, char value){
if(idx < low || idx > high)
return ;
if(low == high){
ST[pos].frequency[ST[pos].replaced - 'a'] = 0 ;
ST[pos].frequency[value - 'a'] = 1 ;
ST[pos].replaced = value ;
return ;
}
int mid = (low + high) / 2 ;
update(idx, low, mid, 2*pos+1, value) ;
update(idx, mid+1, high, 2*pos+2, value) ;
combine(pos) ;
}
inline node query(int i, int j, int low, int high, int pos){
if(j < low || i > high)
return empty_node ;
if(i <= low && high <= j)
return ST[pos] ;
int mid = (low + high) / 2 ;
node left, right, output ;
left = query(i, j, low, mid, 2*pos+1) ;
right = query(i, j, mid+1, high, 2*pos+2) ;
for(int i = 0; i < 27; i++)
output.frequency[i] = left.frequency[i] + right.frequency[i] ;
return output ;
}
int main(){
cin.sync_with_stdio(false) ;
cin >> N >> inp ;
build(0, N-1, 0) ;
cin >> Q;
for(int i = 0; i < Q; i++){
cin >> type ;
if(type == 1){
int x;
char k;
cin >> x >> k ;
update(x-1, 0, N-1, 0, k) ;
}
else{
int left, right ;
cin >> left >> right ;
left--; right--;
node ans = query(left, right, 0, N-1, 0) ;
odd = 0 ;
for(int i = 0; i < 27; i++)
if(ans.frequency[i] % 2)
odd++;
if(odd <= 1)
cout << "YES\n" ;
else
cout << "NO\n" ;
}
}
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZGV7CgogICAgaW50IGZyZXF1ZW5jeVsyN10gOwogICAgY2hhciByZXBsYWNlZCAgIDsKCn07CmludCBOLCBRLCBvZGQsIHR5cGU7CnN0cmluZyBpbnAgOwpub2RlIFNUWzM4MDAwMF0gOwpub2RlIGVtcHR5X25vZGUgOwoKaW5saW5lIHZvaWQgY29tYmluZShpbnQgcG9zKXsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDI3OyBpKyspCiAgICAgICAgU1RbcG9zXS5mcmVxdWVuY3lbaV0gPSBTVFsyKnBvcysxXS5mcmVxdWVuY3lbaV0gKyBTVFsyKnBvcysyXS5mcmVxdWVuY3lbaV0gICAgOwoKfQoKaW5saW5lIHZvaWQgYnVpbGQoaW50IGxvdywgaW50IGhpZ2gsIGludCBwb3MpewoKICAgIGlmKGxvdz09aGlnaCl7CgogICAgICAgIFNUW3Bvc10uZnJlcXVlbmN5W2lucFtsb3ddIC0gJ2EnXSArPSAxIDsKICAgICAgICBTVFtwb3NdLnJlcGxhY2VkID0gaW5wW2xvd10gOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMiAgOwogICAgYnVpbGQobG93LCBtaWQsIDIqcG9zKzEpICAgIDsKICAgIGJ1aWxkKG1pZCsxLCBoaWdoLCAyKnBvcysyKSA7CgogICAgY29tYmluZShwb3MpICAgIDsKCn0KCmlubGluZSB2b2lkIHVwZGF0ZShpbnQgaWR4LCBpbnQgbG93LCBpbnQgaGlnaCwgaW50IHBvcywgY2hhciB2YWx1ZSl7CgogICAgaWYoaWR4IDwgbG93IHx8IGlkeCA+IGhpZ2gpCiAgICAgICAgcmV0dXJuIDsKICAgIGlmKGxvdyA9PSBoaWdoKXsKCiAgICAgICAgU1RbcG9zXS5mcmVxdWVuY3lbU1RbcG9zXS5yZXBsYWNlZCAtICdhJ10gPSAwIDsKICAgICAgICBTVFtwb3NdLmZyZXF1ZW5jeVt2YWx1ZSAtICdhJ10gPSAxICAgOwogICAgICAgIFNUW3Bvc10ucmVwbGFjZWQgPSB2YWx1ZSA7CiAgICAgICAgcmV0dXJuIDsKCiAgICB9CgogICAgaW50IG1pZCA9IChsb3cgKyBoaWdoKSAvIDIgIDsKICAgIHVwZGF0ZShpZHgsIGxvdywgbWlkLCAyKnBvcysxLCB2YWx1ZSkgICA7CiAgICB1cGRhdGUoaWR4LCBtaWQrMSwgaGlnaCwgMipwb3MrMiwgdmFsdWUpICAgIDsKICAgIGNvbWJpbmUocG9zKSAgICA7Cn0KCmlubGluZSBub2RlIHF1ZXJ5KGludCBpLCBpbnQgaiwgaW50IGxvdywgaW50IGhpZ2gsIGludCBwb3MpewoKICAgIGlmKGogPCBsb3cgfHwgaSA+IGhpZ2gpCiAgICAgICAgcmV0dXJuIGVtcHR5X25vZGUgICA7CgogICAgaWYoaSA8PSBsb3cgJiYgaGlnaCA8PSBqKQogICAgICAgIHJldHVybiBTVFtwb3NdICA7CgogICAgaW50IG1pZCA9IChsb3cgKyBoaWdoKSAvIDIgIDsKICAgIG5vZGUgbGVmdCwgcmlnaHQsIG91dHB1dCAgICA7CgogICAgbGVmdCA9IHF1ZXJ5KGksIGosIGxvdywgbWlkLCAyKnBvcysxKSAgIDsKICAgIHJpZ2h0ID0gcXVlcnkoaSwgaiwgbWlkKzEsIGhpZ2gsIDIqcG9zKzIpICAgOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCAyNzsgaSsrKQogICAgICAgIG91dHB1dC5mcmVxdWVuY3lbaV0gPSBsZWZ0LmZyZXF1ZW5jeVtpXSArIHJpZ2h0LmZyZXF1ZW5jeVtpXSAgOwogICAgcmV0dXJuIG91dHB1dCA7Cgp9CgppbnQgbWFpbigpewoKICAgIGNpbi5zeW5jX3dpdGhfc3RkaW8oZmFsc2UpICA7CiAgICBjaW4gPj4gTiA+PiBpbnAgICA7CgogICAgYnVpbGQoMCwgTi0xLCAwKSAgICA7CgogICAgY2luID4+IFE7CgogICAgZm9yKGludCBpID0gMDsgaSA8IFE7IGkrKyl7CiAgICAgICAgY2luID4+IHR5cGUgOwogICAgICAgIGlmKHR5cGUgPT0gMSl7CiAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICBjaGFyIGs7CiAgICAgICAgICAgIGNpbiA+PiB4ID4+IGsgICA7CiAgICAgICAgICAgIHVwZGF0ZSh4LTEsIDAsIE4tMSwgMCwgaykgICAgOwogICAgICAgIH0KCiAgICAgICAgZWxzZXsKCiAgICAgICAgICAgIGludCBsZWZ0LCByaWdodCA7CiAgICAgICAgICAgIGNpbiA+PiBsZWZ0ID4+IHJpZ2h0ICAgIDsKICAgICAgICAgICAgbGVmdC0tOyByaWdodC0tOwogICAgICAgICAgICBub2RlIGFucyA9IHF1ZXJ5KGxlZnQsIHJpZ2h0LCAwLCBOLTEsIDApIDsKICAgICAgICAgICAgb2RkID0gMCA7CgogICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMjc7IGkrKykKICAgICAgICAgICAgICAgIGlmKGFucy5mcmVxdWVuY3lbaV0gJSAyKQogICAgICAgICAgICAgICAgICAgIG9kZCsrOwogICAgICAgICAgICBpZihvZGQgPD0gMSkKICAgICAgICAgICAgICAgIGNvdXQgPDwgIllFU1xuIiA7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNvdXQgPDwgIk5PXG4iICA7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDAgICAgOwp9Cg==