1 #include <cstdio>
2 #include <cstring>
3 #include <cstdlib>
4 #include <algorithm>
5 #include <iostream>
6
7 using namespace std;
8
9 struct N
10 {
11 char data;
12 N *l,*r;
13 };
14
15 N *creat()
16 {
17 N *p = (N *)malloc(sizeof(N));
18 p->l = p->r = NULL;
19 return p;
20 }
21
22 int site = 0;
23
24 bool insert(N *root,char *s)
25 {
26 if(s[site] == '\0')
27 return false;
28
29 if(s[site] == ',')
30 {
31 root = NULL;
32 site++;
33 return true;
34 }
35 else
36 {
37 root->data = s[site++];
38 root->l = creat();
39 if(insert(root->l,s))
40 root->l = NULL;
41 root->r = creat();
42 if(insert(root->r,s))
43 root->r = NULL;
44 return false;
45 }
46 }
47
48
49 void output1(N *root)
50 {
51 if(root == NULL)
52 return ;
53 output1(root->l);
54 cout<<root->data;
55 output1(root->r);
56 }
57
58 void output2(N *root)
59 {
60 if(root == NULL)
61 return ;
62
63 if(root->l == NULL && root->r == NULL)
64 {
65 cout<<root->data;
66 return ;
67 }
68
69 output2(root->l);
70 output2(root->r);
71 cout<<root->data;
72 }
73
74 int ans;
75
76 void depth(N *root,int dep)
77 {
78
79 if(ans < dep)
80 ans = dep;
81
82 if(root == NULL)
83 return ;
84 depth(root->l,dep+1);
85 depth(root->r,dep+1);
86 }
87
88 void leaf(N *root)
89 {
90 if(root == NULL)
91 return ;
92 if(root->l == NULL && root->r == NULL)
93 ans++;
94 leaf(root->l);
95 leaf(root->r);
96 }
97
98 int main()
99 {
100 char s[51];
101
102 N *root = creat();
103
104 cin>>s;
105
106 int i ,l;
107
108 site = 0;
109
110 insert(root,s);
111
112 output1(root);
113 cout<<endl;
114 output2(root);
115 cout<<endl;
116
117 ans = 0;
118
119 leaf(root);
120
121 cout<<ans<<endl;
122
123 ans = 0;
124
125 depth(root,0);
126
127 cout<<ans<<endl;
128
129 return 0;
130 }