import java.nio.file.*;
import java.util.*;

public class Euler79 {
    public static void main(String[] args) throws Exception {
        List<String> logs = Files.readAllLines(Path.of("resources/documents/0079_keylog.txt"));
        Set<Character> digits = new TreeSet<>();
        Map<Character, Set<Character>> edges = new HashMap<>();
        for (String log : logs) {
            log = log.trim();
            if (log.isEmpty())
                continue;
            for (char c : log.toCharArray()) {
                digits.add(c);
                edges.putIfAbsent(c, new TreeSet<>());
            }
            for (int i = 0; i < log.length() - 1; i++)
                edges.get(log.charAt(i)).add(log.charAt(i + 1));
        }
        Map<Character, Integer> inDeg = new HashMap<>();
        for (char d : digits)
            inDeg.put(d, 0);
        for (char u : edges.keySet())
            for (char v : edges.get(u))
                inDeg.merge(v, 1, Integer::sum);
        Queue<Character> q = new LinkedList<>();
        for (char d : digits)
            if (inDeg.get(d) == 0)
                q.add(d);
        StringBuilder sb = new StringBuilder();
        while (!q.isEmpty()) {
            char node = q.poll();
            sb.append(node);
            if (edges.containsKey(node))
                for (char v : edges.get(node)) {
                    inDeg.merge(v, -1, Integer::sum);
                    if (inDeg.get(v) == 0)
                        q.add(v);
                }
        }
        System.out.println(sb);
    }
}
