//leaves.java
import java.io.*;

class leaves {
  public static  void main(String[] arg) {
    String FILE = "leaves";
    ACMIO in = new ACMIO(FILE + ".in");
    PrintWriter out = null;
    try {
      out = new PrintWriter(
              new BufferedWriter(
                new FileWriter(FILE + ".out"))); 
    }catch(Exception e) {
        System.out.println("can't open output");
    }
    String line;
    do { // read all data sets
      String[] leaves = new String[26];
      int levels = 0;
      line = in.getLine();
      // read dataset
      while (line.charAt(0) != '*' && line.charAt(0) != '$') {
        leaves[levels] = line;
        levels++;
        line = in.getLine();
      }
      out.println(preorder(leaves, levels));
    } while (line.charAt(0) == '*');
    out.close();
  }
    
  static String preorder(String[] leaves, int levels) {
    while (levels > 0 && leaves[levels-1].length() == 0) // find root
      levels--;  
    if (levels == 0) return ""; // no root
    levels--;  // now have max levels in subtrees under root
    char root = leaves[levels].charAt(0); // last leaf is the root
    String[] left = new String[levels];  // leaves for left subtree
    String[] right = new String[levels]; // leaves for right subtree
    for (int i = 0; i < levels; i++) { // for each String in leaves
      int past = 0; // past will be index of char in leaves[i] past root
      while (past < leaves[i].length() && leaves[i].charAt(past) < root)
        past++;
      left[i] = leaves[i].substring(0,past);
      right[i] = leaves[i].substring(past);
    }
    return root + preorder(left, levels) + preorder(right, levels);
  }
}
         
          
