//Copyright Matthias Jauernig, 2004

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CH 100

void quicksort(char **a, int l, int r){
    if(r>l){
        int i=l-1, j=r;
        char *tmp;
        for(;;){
            while(strncmp(a[++i],a[r],MAX_CH)<0);
            while(strncmp(a[--j],a[r],MAX_CH)>0 && j>i);
            if(i>=j) break;
            tmp=a[i]; a[i]=a[j]; a[j]=tmp;
        }
        tmp=a[i]; 
        a[i]=a[r]; a[r]=tmp;

        quicksort(a, l, i-1);
        quicksort(a, i+1, r);
    }
}

int main(void){
    char zeichen;
    char **stringfeld=NULL;
    int laenge=0, strings=0, i;
    char tmp[MAX_CH];
    
    while((zeichen=getchar())!=EOF){
        if(laenge>=MAX_CH) return -1;
        switch(zeichen){
            case '\n': 
            case ' ' : 
            case '\t':
                if(laenge>0){
                    tmp[laenge]='\0';
                    stringfeld=(char**)realloc(stringfeld,(strings+1)*sizeof(char*));
                    stringfeld[strings]=(char*)malloc(laenge+1);
                    strcpy(stringfeld[strings++],tmp);
                    laenge=0;
                }
		break;
            default:
                tmp[laenge]=zeichen;
		laenge++;
        }
    }
    quicksort(stringfeld,0,strings-1);
    for(i=0; i<strings; i++){
        printf("%s ", stringfeld[i]);
	free(stringfeld[i]);
    }
    free(stringfeld);
    
    return 0;
}

