#include <stdio.h>

#define OUT(A,B) printf("%d %d %d\n",A|B,A&B,A^B)
typedef struct List {
	int num1;
	int num2;
	struct List* next;
	struct List* end;
}List;
void Add(List* L, int num1, int num2) {
	List* p = L;
	List* s = (List*)malloc(sizeof(List));
	s->num1 = num1;
	s->num2 = num2;
	s->next = p->end->next;
	s->end = NULL;
	p->num1++;
	p->end->next = s;
	p->end = s;
}
int main() {
	int T = 0;
	scanf("%d", &T);
	List* head = (List*)malloc(sizeof(List));
	head->num1 = 0;
	head->num2 = 0;
	head->next = NULL;
	head->end = head;
	for (int i = 0;i < T;i++) {
		int num1 = 0;
		int num2 = 0;
		scanf("%d %d", &num1, &num2);
		Add(head, num1, num2);
	}
	List* p = NULL;
	while (0 != T) {
		p = head->next;
		free(head);
		OUT(p->num1, p->num2);
		T--;
		head = p;
	}
	free(p);
	p = NULL;
    head = NULL;
	return 0;
}