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

void sortmaxstr(int k,int m,char A[k][m]){             //选择排序,最小的放前面的,顺序增大
    int i,j;
    char temp[m];
    for(i=0;i<k;i++){
        for(j=i+1;j<k;j++){
        if(strcmp(A[i],A[j])>0){                    //函数库的字符串比较排序
            strcpy(temp,A[i]);                      //前者顺序大就调换,始终保持第i个都比i+1到最后一个小
            strcpy(A[i],A[j]);
            strcpy(A[j],temp);
           }
        }
        printf("%s\n",A[i]);                        //直接输出
    }
    return;
}

int main() {
    int n,i,j;

    scanf("%d",&n);
    char str[n][101];
    char temp[101],a[5];
    gets(a);
    i=0;
    while (i<n){
        scanf("%s",str[i]);                        //为什么我这里用fgets(str,101,stdin),就出现段错误??
        i++;
    }
    sortmaxstr(n,101,str);
    return 0;
}


/*void sortmaxstr(int k,int m,char A[k][m]){             //选择排序,最小的放前面的,顺序增大
    int i,j;
    char temp[m];
    for(i=0;i<k;i++){
        for(j=i+1;j<k;j++){
        if(strcmp(A[i],A[j])>0){
            strcpy(temp,A[i]);
            strcpy(A[i],A[j]);
            strcpy(A[j],temp);
           }
        }
        printf("%s",A[i]);                    //这里,scanf的要换行。
    }
    return;
}

int main() {
    int n,i,j;

    scanf("%d",&n);
    char str[n][101];
    char temp[101],a[5];
    gets(a);
    i=0;
    while (fgets(str[i],101,stdin)){      //这里fgets            
        i++;
    }
    sortmaxstr(n,101,str);
    return 0;
}*/