#include<stdio.h>//本题使用链表的冒泡排序(自己懵的),可能有冗杂的地方,欢迎大家观摩哦
#include<stdlib.h>
typedef struct num
{
    char s[100];
    int num;
    struct num *next;
}link;
link* create(int n)
{
    link* head,*node,*now;
    head =(link*) malloc(sizeof(link));
    now =head;
    for(int i=1;i<=n;i++)
    {
        node =(link*)malloc(sizeof(link));
        scanf("%s",&node->s);
        scanf("%d",&node->num);
        now->next =node;
        now=node;
    }
    return head;
}
void paixu(int n,link* head)//排序
{
    link* r,*node,*l;
    for(int i=0;i<n;i++)
    {
        node =head;
        l=node->next;
        r=node->next->next;
        for(int j =0;j<n-i-1;j++)
        {
            if(l->num>r->num)//换时l左边相当于没动,右边r挪了两位,或者说在l上又移了一位
            {
                node->next=r;
                l->next=r->next;
                r->next=l;
                r=l->next;
                node=node->next;
            }
            else//不换时正常链表遍历
            {
                node =node->next;
                l=l->next;
                r=r->next;
            }
        }
    }
}
void show(int n,link*head)
{
    link*node =head->next;
    while(node!=NULL)
    {
        printf("%s\n",node->s);
        node =node->next;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    link*a =create(n);
    paixu(n,a);
    show(n,a);
    return 0;
}