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