import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.tree.*;

class MeApp {
    public static void main(String[] args) throws Exception {
        final DefaultMutableTreeNode root = new DefaultMutableTreeNode("ROOT");
        final BufferedReader r = new BufferedReader(new FileReader(args[0]));
        try {
            String path;
            while ((path = r.readLine()) != null) {
                DefaultMutableTreeNode node = root;
                for (String name : path.split("\\\\")) {
                    node = getChild(node, name);
                }
            }
        } finally {
            r.close();
        }
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                final MeFrame frame = new MeFrame(root);
                frame.setDefaultCloseOperation(MeFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

    private static DefaultMutableTreeNode getChild(DefaultMutableTreeNode parent, String name) {
        final Enumeration e = parent.children();
        while (e.hasMoreElements()) {
            final DefaultMutableTreeNode child = (DefaultMutableTreeNode)e.nextElement();
            if (child.getUserObject().equals(name)) {
                return child;
            }
        }
        final DefaultMutableTreeNode child = new DefaultMutableTreeNode(name);
        parent.add(child);
        return child;
    }
}

class MeFrame extends JFrame {
    public MeFrame(TreeNode root) {
        final JTree tree = new JTree(root);
        for (int i = 0; i < tree.getRowCount(); ++i) { // expand all
            tree.expandRow(i);
        }
        setContentPane(new JScrollPane(tree));
    }
}

