#include<bits/stdc++.h>
using namespace std;
int main(){
int Q;
cin >> Q; // number of queries
assert(Q<=100000&&Q>=1);
bool root=0; // root denotes the color of the ROOT 0-> black 1-> white.
while(Q--){
string ch;
int x,y;
cin >> ch;
// Qi -> change color all black nodes to red and all red nodes to black
// Qb -> number of black nodes on the path from node x to node y.
// Qr -> number of red nodes on the path from node x to node y.
if(ch[1]=='i'){
root=root^1; // toggling root color
}else{
cin >> x >> y;
assert(x<=1000000000&&x>=1);
assert(y<=1000000000&&y>=1);
bool colx;
int c=0,xx,pathlen=0;
xx=x;
while(xx){ // c number of nodes on the path from x to root
c++; // this is used to find the color of node x.
xx/=2;
}
c&1 ? colx=root : colx=root^1; // getting the color of node x
while(1){
if(x==y){
pathlen++;
break;
}
if(x>y)
x/=2;
else
y/=2;
pathlen++;
}
// total pathlen from node x to node y
// depending upon the color of node x and path length from node x to node y.
// we can answer number of black/red nodes on the path from x to y.
if(ch[1]=='b'){
if(colx){
cout << pathlen/2 << endl;
}else{
cout << (pathlen+1)/2 << endl;
}
}else{
if(colx){
cout << (pathlen+1)/2 << endl;
}else{
cout << pathlen/2 << endl;
}
}
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1haW4oKXsKCglpbnQgUTsKCWNpbiA+PiBROwkvLyBudW1iZXIgb2YgcXVlcmllcwoJYXNzZXJ0KFE8PTEwMDAwMCYmUT49MSk7Cglib29sIHJvb3Q9MDsgICAgLy8gcm9vdCBkZW5vdGVzIHRoZSBjb2xvciBvZiB0aGUgUk9PVCAwLT4gYmxhY2sgMS0+IHdoaXRlLgoJd2hpbGUoUS0tKXsKCQlzdHJpbmcgY2g7CgkJaW50IHgseTsKCQljaW4gPj4gY2g7CgkJLy8gUWkgLT4gY2hhbmdlIGNvbG9yIGFsbCBibGFjayBub2RlcyB0byByZWQgYW5kIGFsbCByZWQgbm9kZXMgdG8gYmxhY2sKCQkvLyBRYiAtPiBudW1iZXIgb2YgYmxhY2sgbm9kZXMgb24gdGhlIHBhdGggZnJvbSBub2RlIHggdG8gbm9kZSB5LgoJCS8vIFFyIC0+IG51bWJlciBvZiByZWQgbm9kZXMgb24gdGhlIHBhdGggZnJvbSBub2RlIHggdG8gbm9kZSB5LgoJCWlmKGNoWzFdPT0naScpewoJCQlyb290PXJvb3ReMTsJLy8gdG9nZ2xpbmcgcm9vdCBjb2xvcgoJCQkKCQl9ZWxzZXsKCQkJY2luID4+IHggPj4geTsKCQkJYXNzZXJ0KHg8PTEwMDAwMDAwMDAmJng+PTEpOwoJCQlhc3NlcnQoeTw9MTAwMDAwMDAwMCYmeT49MSk7CgkJCWJvb2wgY29seDsKCQkJaW50IGM9MCx4eCxwYXRobGVuPTA7CgkJCXh4PXg7CgkJCXdoaWxlKHh4KXsgICAgLy8gYyBudW1iZXIgb2Ygbm9kZXMgb24gdGhlIHBhdGggZnJvbSB4IHRvIHJvb3QKCQkJCWMrKzsgIC8vIHRoaXMgaXMgdXNlZCB0byBmaW5kIHRoZSBjb2xvciBvZiBub2RlIHguCgkJCQl4eC89MjsKCQkJfQoJCQljJjEgPyBjb2x4PXJvb3QgOiBjb2x4PXJvb3ReMTsgLy8gZ2V0dGluZyB0aGUgY29sb3Igb2Ygbm9kZSB4CgkJCQkJCQoJCQl3aGlsZSgxKXsKCQkJCWlmKHg9PXkpewoJCQkJCXBhdGhsZW4rKzsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmKHg+eSkKCQkJCQl4Lz0yOwoJCQkJZWxzZQoJCQkJCXkvPTI7CgkJCQlwYXRobGVuKys7CgkJCX0KCQkJLy8gdG90YWwgcGF0aGxlbiBmcm9tIG5vZGUgeCB0byBub2RlIHkKCQkJLy8gZGVwZW5kaW5nIHVwb24gdGhlIGNvbG9yIG9mIG5vZGUgeCBhbmQgcGF0aCBsZW5ndGggZnJvbSBub2RlIHggdG8gbm9kZSB5LgoJCQkvLyB3ZSBjYW4gYW5zd2VyIG51bWJlciBvZiBibGFjay9yZWQgbm9kZXMgb24gdGhlIHBhdGggZnJvbSB4IHRvIHkuCgkJCWlmKGNoWzFdPT0nYicpewoJCQkJaWYoY29seCl7CgkJCQkJY291dCA8PCBwYXRobGVuLzIgPDwgZW5kbDsKCQkJCX1lbHNlewoJCQkJCWNvdXQgPDwgKHBhdGhsZW4rMSkvMiA8PCBlbmRsOwoJCQkJfQoJCQl9ZWxzZXsKCQkJCWlmKGNvbHgpewoJCQkJCWNvdXQgPDwgKHBhdGhsZW4rMSkvMiA8PCBlbmRsOwoJCQkJfWVsc2V7CgkJCQkJY291dCA8PCBwYXRobGVuLzIgPDwgZW5kbDsKCQkJCX0KCQkJfQoJCX0JCgl9CglyZXR1cm4gMDsKfQ==