#include<iostream>
#include <cstdio>
#define ARR_SIZE 6250//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 short 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,value;
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 == 16) {
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 >> 4;//j=pos/16 here j is the chunk A[j] which will be modified
k = 1 << (pos % 16);//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 >> 4;
k = 1 << (pos % 16);
B[j] = (bit - ZERO_CHAR) ? B[j] | k : B[j] & (~k);
} else {
sscanf(cmd, "get_c %d", &pos);
j = pos >> 4;//j is index for the chunk
k = pos % 16;//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++) {
value = A[i] + B[i] + transfer;
C[i]=value;
//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+CgojZGVmaW5lIEFSUl9TSVpFICA2MjUwLy90YWtpbmcgbXkgY2h1bmtzIHRvIGJlIGxvbmcgbG9uZyBpbnRzIHdoaWNoIGFyZSA2NCBiaXRzLlNvIHBlcmZvcm1hbmNlIGJlY29tZXMgNjQgdGltZXMKI2RlZmluZSBaRVJPX0NIQVIgICAnMCcKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1haW4oKSB7CiAgICB1bnNpZ25lZCBzaG9ydCBBW0FSUl9TSVpFXSwgQltBUlJfU0laRV0sIENbQVJSX1NJWkUrMV0sCiAgICB2YWx1ZV9hID0gMCwgdmFsdWVfYiA9IDA7IAogICAgYm9vbCB0cmFuc2ZlciA9IDA7CiAgICAKICAgIGludCBqID0gMCwgayA9IDAsIGkgPSAwLCBuLCBxLCBwb3MsdmFsdWU7CiAgICBjaGFyIGFbMTAwMDAxXSwgYlsxMDAwMDFdLCBjbWRbMzJdLCBiaXQ7CiAgICAKICAgIHNjYW5mKCIlZCAlZFxuIiwgJm4sICZxKTsKICAgIAogICAgY2luLmdldGxpbmUoYSwxMDAwMDEpOwogICAgY2luLmdldGxpbmUoYiwxMDAwMDEpOwogICAgCiAgICB3aGlsZSAobi0tKSB7Ly9jb252ZXJ0aW5nIHRoZSBiaW5hcnkgc3RyaW5nIGludG8gYXJyYXkgb2Ygc2hvcnRzCiAgICAgICAgdmFsdWVfYSB8PSAoYVtuXSAtIFpFUk9fQ0hBUikgPDwgazsKICAgICAgICB2YWx1ZV9iIHw9IChiW25dIC0gWkVST19DSEFSKSA8PCBrOwogICAgICAgIGsrKzsKICAgICAgICBpZiAoayA9PSAxNikgewogICAgICAgICAgICBBW2pdID0gdmFsdWVfYTsKICAgICAgICAgICAgQltqKytdID0gdmFsdWVfYjsKICAgICAgICAgICAgdmFsdWVfYSA9IHZhbHVlX2IgPSBrID0gMDsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGlmIChrKSB7CiAgICAgICAgQVtqXSA9IHZhbHVlX2E7CiAgICAgICAgQltqXSA9IHZhbHVlX2I7CiAgICB9CiAgICAKICAgIHdoaWxlKHEtLSkgewogICAgICAgIGNpbi5nZXRsaW5lKGNtZCwzMik7CiAgICAgICAgaWYgKGNtZFs0XSA9PSAnYScpIHsKICAgICAgICAgICAgc3NjYW5mKGNtZCwgInNldF9hICVkICVjIiwgJnBvcywgJmJpdCk7Ly9iaXQgaXMgZWl0aGVyICcwJyBvciAnMSdObyAyIHNjYW5mcy5qdXN0IDEgc3NjYW5mIGRvZXMgdGhlIHRyaWNrLm5vIG5lZWQgdG8gdGFrZSBjYXJlIG9mIGdldGNoYXIKICAgICAgICAgICAgaiA9IHBvcyA+PiA0Oy8vaj1wb3MvMTYgaGVyZSBqIGlzIHRoZSBjaHVuayBBW2pdIHdoaWNoIHdpbGwgYmUgbW9kaWZpZWQKICAgICAgICAgICAgayA9IDEgPDwgKHBvcyAlIDE2KTsvL3BvcyUxNiBnaXZlcyB1cyB0aGUgYml0IHBvc2l0aW9uIHdpdGhpbiB0aGUgY2h1bmsgQVtqXQogICAgICAgICAgICBBW2pdID0gKGJpdCAtIFpFUk9fQ0hBUikgPyBBW2pdIHwgayA6IEFbal0gJiAofmspOy8vaWYgMSB0aGVuIHNldCBiaXQgZWxzZSByZXNldCBiaXQKICAgICAgICB9IGVsc2UgaWYgKGNtZFs0XSA9PSAnYicpIHsKICAgICAgICAgICAgc3NjYW5mKGNtZCwgInNldF9iICVkICVjIiwgJnBvcywgJmJpdCk7CiAgICAgICAgICAgIGogPSBwb3MgPj4gNDsKICAgICAgICAgICAgayA9IDEgPDwgKHBvcyAlIDE2KTsKICAgICAgICAgICAgQltqXSA9IChiaXQgLSBaRVJPX0NIQVIpID8gQltqXSB8IGsgOiBCW2pdICYgKH5rKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzc2NhbmYoY21kLCAiZ2V0X2MgJWQiLCAmcG9zKTsKICAgICAgICAgICAgaiA9IHBvcyA+PiA0Oy8vaiBpcyBpbmRleCBmb3IgdGhlIGNodW5rCiAgICAgICAgICAgIGsgPSBwb3MgJSAxNjsvL3RoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIGNodW5rIHdoaWNoIHdlIHdhbnQgdG8gZ2V0CiAgICAgICAgICAgIAogICAgICAgICAgICB0cmFuc2ZlciA9IDA7Ly9jYXJyeQoJCQkvL3RoZSB0cmljayBpcyB0byBjYWxjdWxhdGUgdGhlIHN1bSBvbmx5IHRpbGwgdGhlIGJpdCB0aGF0IHUgd2FudCB0byBmaW5kIGluIHRoZSByZXN1bHQKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBqOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhbHVlID0gQVtpXSArIEJbaV0gKyB0cmFuc2ZlcjsKCQkJCUNbaV09dmFsdWU7CgkJCQkvL2Jvb2wgY2Fycnlpbj1DW2ldPj42M15BW2ldPj42M15CW2ldPj42MzsKCQkJCS8vYm9vbCBjaGVjaz0oQVtpXT4+NjMmQltpXT4+NjN8Y2FycnlpbiZBW2ldPj42M3xjYXJyeWluJkJbaV0+PjYzKTsKICAgICAgICAgICAgICAgIC8vaWYoY2hlY2spCgkJCQkvL3RyYW5zZmVyPTE7CgkJCQkvL2Vsc2UKCQkJCS8vdHJhbnNmZXI9MDsKCQkJCXRyYW5zZmVyID0gdmFsdWUgPj4gMTY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHByaW50ZigiJWMiLCBDW2pdICYgKDEgPDwgaykgPyAnMScgOiAnMCcpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0=