#include <stdio.h>
#include <stdlib.h>
typedef struct node{
    int id;
    int ar;
    struct node*next;
}node;
node*front=NULL,*rear=NULL;
void enqueue(int v, int t){
    node*newnode=(node*)malloc(sizeof(node));
    newnode->id=v;
    newnode->ar=t;
    newnode->next=NULL;
}
    if(front==NULL){
       front=rear=newnode;
}
    else{
     rear->next=newnode;
     rear=newnode;
}

void dequeue(){
    node*temp;
    while(front!=NULL){
        printf("%d",front->id);
        temp=front;
        front=front->next;
        free(temp);
    }
}

int main(){
    int n;
    if (scanf("%d", &n) !=1 || n<=0){
        printf("Invalid input");
        return 0;
    }
    int invalid = 0;
    int *id = (int *)malloc(n* sizeof(int));
    int *ar = (int *)malloc(n* sizeof(int));
    
    for(int i=0;i<n;i++){
        if(scanf("%d %d", &id[i], &ar[i]) !=2){
            invalid = 1;
            break;
        }
        if (ar[i]<0){
            invalid =1;
        }
    }
    if (invalid){
        printf("Invalid input");
        free(id);
        free(ar);
        return 0;
    }
    for (int i=0;i<n-1;i++){
        for(int j=0;j<n-i-1;j++){
            if (ar[j]<ar[j + 1]){
                int tmp = ar[j];
                ar[j]=ar[j+1;
                ar[j+1]=tmp;
                tmp=id[j];
                id[j] = id[j+1];
                id[j+1]=tmp;
            }
        }
    }
    for (int i=0;i<n;i++){
        enqueue(id[i],ar[i]);
    }
    dequeue_all();
    
    free(id);
    free(ar);
    return 0;
}