#include <stdio.h>
typedef struct {
    char  bn[50];
    int   price;
} book;

int main() {
    int i, n, m;
    scanf("%d",&n);
    book bookn[n+1], k;  //构造book类型结构数组(一般编译器都会报错,因为n不是常量);
    for (i = 0; i < n; i++) { //存储书目;
        scanf("%s %d", bookn[i].bn, &bookn[i].price);
    }
    
    //按照排序方法直接以price排序各数组元素
    //假设最坏情况,刚好各元素都是降序排列
    for (i = 0; i < n; i++) {
        //第一个for是从每次更新的数组的首元素开始左右互换,假设最坏情况每次首元素都是本轮最大的,需要丢到最后去
        for (m = 0; m < n - i-1;
                m++) { //m=n-i是因为每轮最大的丢到最后总会比上一轮最大的小,在上一轮最大的前面换不动了,所以只需要比上轮少换一次
            //比较price 成员
            if (bookn[m].price > bookn[m + 1].price) 
			{ 
                k = bookn[m];
                bookn[m] = bookn[m + 1];
                bookn[m+1] = k;
            }
        }

    }
    //用for循环输出排序后的数组元素即可
    for (i = 0; i <n; i++)
        printf("%s\n", bookn[i].bn);
    return 0;
}