http://bailian.openjudge.cn/practice/2775/
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
void sort(int N,string s[]){
int i=0;
while(i<N-1){
int j=i+1;
while(j<N){
if(s[i]>s[j]){
string t;
t=s[i];
s[i]=s[j];
s[j]=t;
}
j++;
}
i++;
}
}
char fun(string s1,int N,int T){
string s2;
cin>>s2;
if(s2[0]=='#') return '#';
if(s1=="ROOT") printf("DATA SET %d:\n",T);
int i=0;
while(i<N){
cout<<"| ";
i++;
}
cout<<s1<<endl;
int j=0;
string s[100];
do{
switch(s2[0]){
case 'f':s[j++]=s2;
break;
case 'd':fun(s2,N+1,T);
break;
case ']':{
sort(j,s);
int g=0;
while(g<j){
int i=0;
while(i<N){
cout<<"| ";
i++;
}
cout<<s[g]<<endl;
g++;
}
return ']';
}
case '*':{
sort(j,s);
int g=0;
while(g<j){
cout<<s[g]<<endl;
g++;
}
return '*';
}
case '#': return '#';
}
}while(cin>>s2);
return '*';
}
int main(){
int T=1;
while(true){
if(fun("ROOT",0,T)=='#') break;
cout<<endl;
T++;
}
return 0;
}