import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.TreeSet;
import java.io.BufferedReader;

public class Main {
    private static boolean isLetter(char c) {
        return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z');
    }

    private static void parseToWords(BufferedReader reader, Set<String> uniqueWords) throws IOException {
        StringBuilder currentWord = new StringBuilder();
        boolean wasLetter = false;
        while (reader.ready()) {
            char c = (char)reader.read();
            if (isLetter(c)) {
                currentWord.append(c);
                wasLetter = true;
            } else if (wasLetter) {
                uniqueWords.add(currentWord.toString());
                currentWord = new StringBuilder();
                wasLetter = false;
            }
        }
        if (currentWord.length() != 0) {
            uniqueWords.add(currentWord.toString());
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        Set<String> uniqueWords = new TreeSet<>();
        parseToWords(reader, uniqueWords);
        for (String currentWord : uniqueWords) {
            System.out.println(currentWord);
        }
    }
}