#include <iostream>
#include <iomanip>
#include <memory>
using namespace std;
struct node {
char ch;
node *link[26];
node(char c=0) : link(), ch(c) {}
~node() { for (int i=0;i<26; i++) delete link[i]; }
};
node head;
void addString(node *n, string s) {
if (!s.length()) return;
size_t c = tolower(s[0]);
if (c<'a' || c>'z') return;
if (!n -> link[c-'a']) {
n -> link[c-'a'] = new node(c);
}
addString(n -> link[c-'a'], s.substr(1));
}
void disp(node *n, int x=0) {
cout <<setw(x*2)<<" "<< n->ch<<endl;
for (int i=0; i<26; i++)
if (n->link[i])
disp(n->link[i],x+1);
}
int main(){
addString(&head, "red");
disp(&head);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPG1lbW9yeT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBub2RlIHsKICAgIGNoYXIgY2g7CiAgICBub2RlICpsaW5rWzI2XTsKICAgIG5vZGUoY2hhciBjPTApIDogbGluaygpLCBjaChjKSB7fSAKICAgIH5ub2RlKCkgeyBmb3IgKGludCBpPTA7aTwyNjsgaSsrKSBkZWxldGUgbGlua1tpXTsgfQp9OwoKbm9kZSBoZWFkOwoKdm9pZCBhZGRTdHJpbmcobm9kZSAqbiwgc3RyaW5nIHMpIHsKICAgIGlmICghcy5sZW5ndGgoKSkgcmV0dXJuOwoKICAgIHNpemVfdCBjID0gdG9sb3dlcihzWzBdKTsgCiAgICBpZiAoYzwnYScgfHwgYz4neicpIHJldHVybjsgCiAgICBpZiAoIW4gLT4gbGlua1tjLSdhJ10pIHsKICAgICAgICBuIC0+IGxpbmtbYy0nYSddID0gbmV3IG5vZGUoYyk7IAogICAgfQogICAgYWRkU3RyaW5nKG4gLT4gbGlua1tjLSdhJ10sIHMuc3Vic3RyKDEpKTsKfQoKdm9pZCBkaXNwKG5vZGUgKm4sIGludCB4PTApIHsKCWNvdXQgPDxzZXR3KHgqMik8PCIgIjw8IG4tPmNoPDxlbmRsOyAKCWZvciAoaW50IGk9MDsgaTwyNjsgaSsrKQoJICAgaWYgKG4tPmxpbmtbaV0pCgkgICAgICAgZGlzcChuLT5saW5rW2ldLHgrMSk7IAp9CgppbnQgbWFpbigpewogICAgYWRkU3RyaW5nKCZoZWFkLCAicmVkIik7CiAgICBkaXNwKCZoZWFkKTsgCiAgICByZXR1cm4gMDsKfQo=