import java.io.File; 
import javax.xml.parsers.*; 
import org.w3c.dom.*; 
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
 class MainClass { 
  public static void main(String[] args) throws Exception { 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //создали фабрику строителей, сложный и грамосткий процесс (по реже выполняйте это действие) 
    DocumentBuilder db = dbf.newDocumentBuilder(); // создали конкретного строителя документа 
    Document doc = db.parse(System.in); // стооитель построил документ 
    Node x = doc;
    visit(doc, 0);
    
    
    
    // print
    /*
    DOMSource source = new DOMSource(doc); 
    StreamResult result = new StreamResult(System.out);//Может быть любой поток вывода (файл, сокет ....) 
    TransformerFactory transFactory = TransformerFactory.newInstance(); // Об этом подробней в 4 вопросе 
    Transformer transformer = transFactory.newTransformer(); 
    transformer.transform(source, result); 
    */
  } 
  public static void visit(Node node, int level) { 
    NodeList list = node.getChildNodes(); 
    for (int i = 0; i < list.getLength(); i++) { 
      Node childNode = list.item(i); // текущий нод 
      process(childNode, level + 1); // обработка 
      visit(childNode, level + 1); // рекурсия 
    } 
  } 
  public static void process(Node node, int level) { 
    for (int i = 0; i < level; i++) { 
      System.out.print('\t'); 
    } 
    System.out.print(node.getNodeName()); 
    if (node.getNodeType()==Node.ELEMENT_NODE){ 
        Element e = (Element) node; 
        // работаем как с элементом (у него есть атрибуты и схема)
        NamedNodeMap atts = e.getAttributes();
        try {
        	System.out.print(": " + atts.getNamedItem("id").getNodeValue());
        } catch (Exception ex) {System.out.print(": -");}
    } 
    if (node.getNodeType()==Node.TEXT_NODE){
    	System.out.print("\t"+node.getNodeValue().trim());
    }
    System.out.println(); 
  }
} 
