#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;
}