#include <bits/stdc++.h>
using namespace std;
int N, Q, type;
string inp ;
int ST[380000] ;
inline void build(int low, int high, int pos){
if(low==high){
ST[pos] = 1 << (inp[low] - 'a') ;
return;
}
int mid = (low + high) / 2 ;
build(low, mid, 2*pos+1) ;
build(mid+1, high, 2*pos+2) ;
ST[pos] = ST[2*pos+1]^ST[2*pos+2];
}
inline void update(int idx, int low, int high, int pos, char value){
if(idx < low || idx > high)
return ;
if(low == high){
ST[pos] = 1 << (value - 'a') ;
return ;
}
int mid = (low + high) / 2 ;
update(idx, low, mid, 2*pos+1, value) ;
update(idx, mid+1, high, 2*pos+2, value) ;
ST[pos] = ST[2*pos+1] ^ ST[2*pos+2] ;
}
inline int query(int i, int j, int low, int high, int pos){
if(j < low || i > high)
return 0 ;
if(i <= low && high <= j)
return ST[pos] ;
int mid = (low + high) / 2 ;
return (query(i, j, low, mid, 2*pos+1) ^ query(i, j, mid+1, high, 2*pos+2) ) ;
}
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--;
int ans = query(left, right, 0, N-1, 0) ;
if(__builtin_popcount(ans) <= 1)
cout << "YES\n" ;
else
cout << "NO\n" ;
}
}
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IE4sIFEsIHR5cGU7CnN0cmluZyBpbnAgOwppbnQgU1RbMzgwMDAwXSA7CgoKaW5saW5lIHZvaWQgYnVpbGQoaW50IGxvdywgaW50IGhpZ2gsIGludCBwb3MpewoKICAgIGlmKGxvdz09aGlnaCl7CgogICAgICAgIFNUW3Bvc10gPSAxIDw8IChpbnBbbG93XSAtICdhJykgOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMiAgOwogICAgYnVpbGQobG93LCBtaWQsIDIqcG9zKzEpICAgIDsKICAgIGJ1aWxkKG1pZCsxLCBoaWdoLCAyKnBvcysyKSA7CgogICAgU1RbcG9zXSA9IFNUWzIqcG9zKzFdXlNUWzIqcG9zKzJdOwoKfQoKaW5saW5lIHZvaWQgdXBkYXRlKGludCBpZHgsIGludCBsb3csIGludCBoaWdoLCBpbnQgcG9zLCBjaGFyIHZhbHVlKXsKCiAgICBpZihpZHggPCBsb3cgfHwgaWR4ID4gaGlnaCkKICAgICAgICByZXR1cm4gOwogICAgaWYobG93ID09IGhpZ2gpewoKICAgICAgICBTVFtwb3NdID0gMSA8PCAodmFsdWUgLSAnYScpICAgIDsKICAgICAgICByZXR1cm4gOwoKICAgIH0KCiAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMiAgICAgICAgICAgICAgICAgIDsKICAgIHVwZGF0ZShpZHgsIGxvdywgbWlkLCAyKnBvcysxLCB2YWx1ZSkgICAgICAgOwogICAgdXBkYXRlKGlkeCwgbWlkKzEsIGhpZ2gsIDIqcG9zKzIsIHZhbHVlKSAgICA7CiAgICBTVFtwb3NdID0gU1RbMipwb3MrMV0gXiBTVFsyKnBvcysyXSAgICAgICAgIDsKCn0KCmlubGluZSBpbnQgcXVlcnkoaW50IGksIGludCBqLCBpbnQgbG93LCBpbnQgaGlnaCwgaW50IHBvcyl7CgogICAgaWYoaiA8IGxvdyB8fCBpID4gaGlnaCkKICAgICAgICByZXR1cm4gMCAgICA7CgogICAgaWYoaSA8PSBsb3cgJiYgaGlnaCA8PSBqKQogICAgICAgIHJldHVybiBTVFtwb3NdICA7CgogICAgaW50IG1pZCA9IChsb3cgKyBoaWdoKSAvIDIgIDsKCiAgICByZXR1cm4gKHF1ZXJ5KGksIGosIGxvdywgbWlkLCAyKnBvcysxKSBeIHF1ZXJ5KGksIGosIG1pZCsxLCBoaWdoLCAyKnBvcysyKSApICAgOwp9CgppbnQgbWFpbigpewoKICAgIGNpbi5zeW5jX3dpdGhfc3RkaW8oZmFsc2UpICA7CiAgICBjaW4gPj4gTiA+PiBpbnAgICA7CgogICAgYnVpbGQoMCwgTi0xLCAwKSAgICA7CgogICAgY2luID4+IFE7CgogICAgZm9yKGludCBpID0gMDsgaSA8IFE7IGkrKyl7CiAgICAgICAgY2luID4+IHR5cGUgOwogICAgICAgIGlmKHR5cGUgPT0gMSl7CiAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICBjaGFyIGs7CiAgICAgICAgICAgIGNpbiA+PiB4ID4+IGsgICA7CiAgICAgICAgICAgIHVwZGF0ZSh4LTEsIDAsIE4tMSwgMCwgaykgICAgOwogICAgICAgIH0KCiAgICAgICAgZWxzZXsKCiAgICAgICAgICAgIGludCBsZWZ0LCByaWdodCA7CiAgICAgICAgICAgIGNpbiA+PiBsZWZ0ID4+IHJpZ2h0ICAgIDsKICAgICAgICAgICAgbGVmdC0tOyByaWdodC0tOwogICAgICAgICAgICBpbnQgYW5zID0gcXVlcnkobGVmdCwgcmlnaHQsIDAsIE4tMSwgMCkgOwoKICAgICAgICAgICAgaWYoX19idWlsdGluX3BvcGNvdW50KGFucykgPD0gMSkKICAgICAgICAgICAgICAgIGNvdXQgPDwgIllFU1xuIiA7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNvdXQgPDwgIk5PXG4iICA7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDAgICAgOwp9Cg==