#include <stdio.h>
//用链表和递归,把简单的问题复杂化
typedef struct List {
int cls;
int date;
int several;
struct List* next;
struct List* end;
}List;
int Add(List* L, int cls, int date, int several) {
List* p = L;
List* s = (List*)malloc(sizeof(List));
if (p == NULL) {
return 0;
}
s->cls = cls;
s->date = date;
s->several = several;
s->next = p->end->next;
s->end = NULL;
p->end->next = s;
p->end = s;
p->date++;
return 1;
}
int Move(List* L) {
List* p = L->next;
free(L);
if (p == NULL) {
return 0;
}
if (1 == p->cls) {
printf("%d\n", p->date << p->several);
}
else if (2 == p->cls) {
unsigned int date = p->date;
printf("%u\n", date >> p->several);
}
return Move(p);
}
int main() {
int T = 0;
scanf("%d", &T);
List* head = (List*)malloc(sizeof(List));
head->cls = 0;
head->date = 0;
head->several = 0;
head->next = NULL;
head->end = head;
int cls = 0;
int date = 0;
int several = 0;
for (int i = 0;i < T;i++) {
scanf("%d %d %d", &cls, &date, &several);
Add(head, cls, date, several);
}
Move(head);
head = NULL;
return 0;
}