#include<stdio.h>
#include<stdlib.h>
struct SesNode{
    int sesID;
    int dur;
    struct SesNode* prev;
    struct SesNode* next;
};
int freeTheList(struct SesNode* head){
    struct SesNode* current = head;
    while(current != NULL){
        struct SesNode* temp = current;
        current = current->next;
        free(temp);
    }
    return 1;
}
int main(){
    int n, i, sesID, dur;
    struct SesNode* head = NULL, *tail = NULL;
    if(scanf("%d", &n) != 1){
        printf("Invalid input");
        return 1;
    }
    if(n<1 || n>1000){
        
    }
    for(i=0; i<n; i++){
        if(scanf("%d %d", &sesID, &dur) != 2){
            printf("Invalid input");
            return 1;
        }
        struct SesNode*
        newNode = (struct SesNode)malloc(sizeof(struct SesNode));
        newNode->sesID = sesID;
        newNode->dur = dur;
        newNode->next = NULL;
        if(head == NULL){
            newNode->prev = NULL;
            head = tail = newNode;
        }else{
            tail->next = newNode;
            newNode->prev = tail;
            tail = newNode;
        }
    }
    if(tail != NULL){
        printf("%d %d", tail->sesID, tail->dur);
        struct SesNode* tempToDelete = tail;
        tail = tail->prev;
        if(tail != NULL){
            tail->next = NULL;
        }else{
            head = NULL;
        }
        free(tempToDelete);
    }
    if(head == NULL){
        printf("Log is empty");
    }else{
        struct SesNode* current = head;
        while(current != NULL){
            printf("%d %d\n", current->sesID, current->dur);
            current = current->next;
        }
    }
    freeTheList(head);
    return 0;
}