#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct tag_stdata {
	int student;
	int score;
} stdata;

void grow(stdata** pst, int n, int* psz)
{
	if (n < *psz) return;
	*psz += 10;
	if (*pst ==  NULL) {
		*pst = (stdata*)malloc((*psz) * sizeof(stdata));
	}
	else {
		*pst = (stdata*)realloc(*pst, (*psz) * sizeof(stdata));
	}
	if (*pst == NULL) exit(1);
}

int cmp(const void* x, const void* y)
{
	return ((stdata*)x)->score - ((stdata*)y)->score;
}

int main()
{
	char s[80];
	stdata* st = NULL;
	int stsize, count, i;
	stsize = count = 0;
	for (;;) {
		printf("student[%d]:", count+1);
		if (gets(s) == NULL) break;
		if (strlen(s) == 0) break;
		grow(&st, count, &stsize);
		st[count].student = count + 1;
		st[count].score = atoi(s);
		++count;
	}
	qsort((void*)st, count, sizeof(stdata), cmp);
	for (i = 0; i < count; i++) {
		printf("student[%d]:%d\n", st[i].student, st[i].score);
	}
}
