#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
char num[7];
char name[9];
int grade;
};
int compareByNum(const void *a, const void *b);
int compareByName(const void *a, const void *b);
int compareByGrade(const void *a, const void *b);
int main()
{
int i, n, k;
struct student people[100001];
static int size = 1;
while(scanf("%d %d", &n, &k) != EOF)
{
if(n == 0)
break;
for(i = 0; i < n; i ++)
{
scanf("%s %s %d", people[i].num, people[i].name, &people[i].grade);
}
switch(k)
{
case 1 :
qsort(people, n, sizeof(people[0]), compareByNum);
break;
case 2 :
qsort(people, n, sizeof(people[0]), compareByName);
break;
case 3 :
qsort(people, n, sizeof(people[0]), compareByGrade);
break;
}
printf("Case %d:\n", size ++);
for(i = 0; i < n; i ++)
{
printf("%s %s %d\n", people[i].num, people[i].name, people[i].grade);
}
}
return 0;
}
int compareByNum(const void *a, const void *b)
{
const struct student *p = a;
const struct student *q = b;
return strcmp(p->num, q->num);
}
int compareByName(const void *a, const void *b)
{
const struct student *p = a;
const struct student *q = b;
if(strcmp(p->name, q->name) > 0)
{
return 1;
}else if(strcmp(p->name, q->name) == 0 && strcmp(p->num, q->num) > 0)
{
return 1;
}else
{
return -1;
}
}
int compareByGrade(const void *a, const void *b)
{
const struct student *p = a;
const struct student *q = b;
if(p->grade > q->grade)
{
return 1;
}else if(p->grade == q->grade && strcmp(p->num, q->num) > 0)
{
return 1;
}else
{
return -1;
}
}
/**************************************************************
Problem: 2200
User: admin
Language: C
Result: Accepted
Time:120 ms
Memory:4928 kb
****************************************************************/