#include<iostream>
#include <cstdio>
#define ARR_SIZE 1564//taking my chunks to be long long ints which are 64 bits.So performance becomes 64 times
#define ZERO_CHAR '0'
using namespace std;
int main() {
unsigned long long A[ARR_SIZE], B[ARR_SIZE], C[ARR_SIZE+1],
value_a = 0, value_b = 0;
bool transfer = 0;
int j = 0, k = 0, i = 0, n, q, pos;
char a[100001], b[100001], cmd[32], bit;
scanf("%d %d\n", &n, &q);
cin.getline(a,100001);
cin.getline(b,100001);
while (n--) {//converting the binary string into array of shorts
value_a |= (a[n] - ZERO_CHAR) << k;
value_b |= (b[n] - ZERO_CHAR) << k;
k++;
if (k == 64) {
A[j] = value_a;
B[j++] = value_b;
value_a = value_b = k = 0;
}
}
if (k) {
A[j] = value_a;
B[j] = value_b;
}
while(q--) {
cin.getline(cmd,32);
if (cmd[4] == 'a') {
sscanf(cmd, "set_a %d %c", &pos, &bit);//bit is either '0' or '1'No 2 scanfs.just 1 sscanf does the trick.no need to take care of getchar
j = pos >> 6;//j=pos/16 here j is the chunk A[j] which will be modified
k = 1 << (pos % 64);//pos%16 gives us the bit position within the chunk A[j]
A[j] = (bit - ZERO_CHAR) ? A[j] | k : A[j] & (~k);//if 1 then set bit else reset bit
} else if (cmd[4] == 'b') {
sscanf(cmd, "set_b %d %c", &pos, &bit);
j = pos >> 6;
k = 1 << (pos % 64);
B[j] = (bit - ZERO_CHAR) ? B[j] | k : B[j] & (~k);
} else {
sscanf(cmd, "get_c %d", &pos);
j = pos >> 6;//j is index for the chunk
k = pos % 64;//the position within the chunk which we want to get
transfer = 0;//carry
//the trick is to calculate the sum only till the bit that u want to find in the result
for (i = 0; i <= j; i++) {
C[i] = A[i] + B[i] + transfer;
bool carryin=C[i]>>63^A[i]>>63^B[i]>>63;
bool check=(A[i]>>63&B[i]>>63|carryin&A[i]>>63|carryin&B[i]>>63);
if(check)
transfer=1;
else
transfer=0;
//transfer = value >> 16;
}
printf("%c", C[j] & (1 << k) ? '1' : '0');
}
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlIDxjc3RkaW8+CgojZGVmaW5lIEFSUl9TSVpFICAxNTY0Ly90YWtpbmcgbXkgY2h1bmtzIHRvIGJlIGxvbmcgbG9uZyBpbnRzIHdoaWNoIGFyZSA2NCBiaXRzLlNvIHBlcmZvcm1hbmNlIGJlY29tZXMgNjQgdGltZXMKI2RlZmluZSBaRVJPX0NIQVIgICAnMCcKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1haW4oKSB7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgQVtBUlJfU0laRV0sIEJbQVJSX1NJWkVdLCBDW0FSUl9TSVpFKzFdLAogICAgdmFsdWVfYSA9IDAsIHZhbHVlX2IgPSAwOyAKICAgIGJvb2wgdHJhbnNmZXIgPSAwOwogICAgCiAgICBpbnQgaiA9IDAsIGsgPSAwLCBpID0gMCwgbiwgcSwgcG9zOwogICAgY2hhciBhWzEwMDAwMV0sIGJbMTAwMDAxXSwgY21kWzMyXSwgYml0OwogICAgCiAgICBzY2FuZigiJWQgJWRcbiIsICZuLCAmcSk7CiAgICAKICAgIGNpbi5nZXRsaW5lKGEsMTAwMDAxKTsKICAgIGNpbi5nZXRsaW5lKGIsMTAwMDAxKTsKICAgIAogICAgd2hpbGUgKG4tLSkgey8vY29udmVydGluZyB0aGUgYmluYXJ5IHN0cmluZyBpbnRvIGFycmF5IG9mIHNob3J0cwogICAgICAgIHZhbHVlX2EgfD0gKGFbbl0gLSBaRVJPX0NIQVIpIDw8IGs7CiAgICAgICAgdmFsdWVfYiB8PSAoYltuXSAtIFpFUk9fQ0hBUikgPDwgazsKICAgICAgICBrKys7CiAgICAgICAgaWYgKGsgPT0gNjQpIHsKICAgICAgICAgICAgQVtqXSA9IHZhbHVlX2E7CiAgICAgICAgICAgIEJbaisrXSA9IHZhbHVlX2I7CiAgICAgICAgICAgIHZhbHVlX2EgPSB2YWx1ZV9iID0gayA9IDA7CiAgICAgICAgfQogICAgfQogICAgCiAgICBpZiAoaykgewogICAgICAgIEFbal0gPSB2YWx1ZV9hOwogICAgICAgIEJbal0gPSB2YWx1ZV9iOwogICAgfQogICAgCiAgICB3aGlsZShxLS0pIHsKICAgICAgICBjaW4uZ2V0bGluZShjbWQsMzIpOwogICAgICAgIGlmIChjbWRbNF0gPT0gJ2EnKSB7CiAgICAgICAgICAgIHNzY2FuZihjbWQsICJzZXRfYSAlZCAlYyIsICZwb3MsICZiaXQpOy8vYml0IGlzIGVpdGhlciAnMCcgb3IgJzEnTm8gMiBzY2FuZnMuanVzdCAxIHNzY2FuZiBkb2VzIHRoZSB0cmljay5ubyBuZWVkIHRvIHRha2UgY2FyZSBvZiBnZXRjaGFyCiAgICAgICAgICAgIGogPSBwb3MgPj4gNjsvL2o9cG9zLzE2IGhlcmUgaiBpcyB0aGUgY2h1bmsgQVtqXSB3aGljaCB3aWxsIGJlIG1vZGlmaWVkCiAgICAgICAgICAgIGsgPSAxIDw8IChwb3MgJSA2NCk7Ly9wb3MlMTYgZ2l2ZXMgdXMgdGhlIGJpdCBwb3NpdGlvbiB3aXRoaW4gdGhlIGNodW5rIEFbal0KICAgICAgICAgICAgQVtqXSA9IChiaXQgLSBaRVJPX0NIQVIpID8gQVtqXSB8IGsgOiBBW2pdICYgKH5rKTsvL2lmIDEgdGhlbiBzZXQgYml0IGVsc2UgcmVzZXQgYml0CiAgICAgICAgfSBlbHNlIGlmIChjbWRbNF0gPT0gJ2InKSB7CiAgICAgICAgICAgIHNzY2FuZihjbWQsICJzZXRfYiAlZCAlYyIsICZwb3MsICZiaXQpOwogICAgICAgICAgICBqID0gcG9zID4+IDY7CiAgICAgICAgICAgIGsgPSAxIDw8IChwb3MgJSA2NCk7CiAgICAgICAgICAgIEJbal0gPSAoYml0IC0gWkVST19DSEFSKSA/IEJbal0gfCBrIDogQltqXSAmICh+ayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3NjYW5mKGNtZCwgImdldF9jICVkIiwgJnBvcyk7CiAgICAgICAgICAgIGogPSBwb3MgPj4gNjsvL2ogaXMgaW5kZXggZm9yIHRoZSBjaHVuawogICAgICAgICAgICBrID0gcG9zICUgNjQ7Ly90aGUgcG9zaXRpb24gd2l0aGluIHRoZSBjaHVuayB3aGljaCB3ZSB3YW50IHRvIGdldAogICAgICAgICAgICAKICAgICAgICAgICAgdHJhbnNmZXIgPSAwOy8vY2FycnkKCQkJLy90aGUgdHJpY2sgaXMgdG8gY2FsY3VsYXRlIHRoZSBzdW0gb25seSB0aWxsIHRoZSBiaXQgdGhhdCB1IHdhbnQgdG8gZmluZCBpbiB0aGUgcmVzdWx0CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gajsgaSsrKSB7CiAgICAgICAgICAgICAgICBDW2ldID0gQVtpXSArIEJbaV0gKyB0cmFuc2ZlcjsKCQkJCWJvb2wgY2Fycnlpbj1DW2ldPj42M15BW2ldPj42M15CW2ldPj42MzsKCQkJCWJvb2wgY2hlY2s9KEFbaV0+PjYzJkJbaV0+PjYzfGNhcnJ5aW4mQVtpXT4+NjN8Y2FycnlpbiZCW2ldPj42Myk7CiAgICAgICAgICAgICAgICBpZihjaGVjaykKCQkJCXRyYW5zZmVyPTE7CgkJCQllbHNlCgkJCQl0cmFuc2Zlcj0wOwoJCQkJLy90cmFuc2ZlciA9IHZhbHVlID4+IDE2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBwcmludGYoIiVjIiwgQ1tqXSAmICgxIDw8IGspID8gJzEnIDogJzAnKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHJldHVybiAwOwp9