char ch[105];
typedef struct node* Node;
struct node{
string name;
vector<Node> nxt;
vector<Node> child;
};
Node newnode(){
Node a = (Node)new node;
return a;
}
vector<string> save;
void build(Node rt, int tail){
int lev = 0, i;
Node last = rt;
while (lev < tail - 1){
for (i = 0; i < last->nxt.size(); i++)
if (last->nxt[i]->name == save[lev]){
break;
}
if (i < last->nxt.size()){
last = last->nxt[i];
}
else{
Node now = newnode();
now->name = save[lev];
last->nxt.push_back(now);
last = now;
}
lev++;
}
if (lev == tail - 1){
for (int i = 0; i < last->child.size(); i++)
if (last->child[i]->name == save[lev])
return;
Node now = newnode();
now->name = save[lev];
last->child.push_back(now);
}
}
bool cmp(Node a, Node b){
return a->name<b->name;
}
void visit(Node root,int lev){
if (lev > 0){
for (int i = 0; i < 4 * (lev - 1); i++)
putchar(' ');
cout << root->name << endl;
}
sort(root->nxt.begin(), root->nxt.end(), cmp);
sort(root->child.begin(), root->child.end(), cmp);
for (int i = 0; i < root->nxt.size(); i++)
visit(root->nxt[i], lev + 1);
for (int i = 0; i < root->child.size(); i++)
visit(root->child[i], lev + 1);
}
void free(Node root, int lev){
for (int i = 0; i < root->child.size(); i++)
free(root->child[i], lev + 1);
for (int i = 0; i < root->nxt.size(); i++)
free(root->nxt[i], lev + 1);
delete(root);
}
void data_in(){
}
void solve(){
}
int main(){
int cas = 0;
while (gets(ch)){
Node root = newnode();
while (strcmp(ch, "0") != 0){
int len = strlen(ch), pos = 0;
save.clear();
while (pos<len){
while (ch[pos] == '/')
pos++;
string str = "";
while (ch[pos] != '/'&&pos < len)
str += ch[pos], pos++;
save.push_back(str);
}
build(root, save.size());
gets(ch);
}
printf("Case %d:\n", ++cas);
visit(root, 0);
free(root, 0);
}
return 0;
}
07-31
07-31
07-31