#include <string>
#include <iostream>
using namespace std;
class Node
{
public:
int count;
Node *(children[26]); // array of pointers
Node() { count = 0; for (int i = 0; i < 26; i++) children[i] = NULL; };
};
void add(char *s, Node &n)
{
if (*s == 0) // null-terminator
return;
if (n.children[*s-'a'] == NULL)
n.children[*s-'a'] = new Node();
n.count++;
add(s+1, *n.children[*s-'a']);
}
void print(char *start, char *end, Node &n)
{
if (n.count == 1)
{
*end = 0; // null-terminator
cout << start << endl;
return;
}
for (int i = 0; i < 26; i++)
{
if (n.children[i] != NULL)
{
*end = (char)(i+'a');
print(start, end+1, *n.children[i]);
}
}
}
int main()
{
char *s = "stackoverflow";
Node root;
add(s, root);
s = "standup";
add(s, root);
char output[1000]; // big buffer
print(output, output, root);
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgTm9kZQp7CiAgcHVibGljOgogICAgaW50IGNvdW50OwogICAgTm9kZSAqKGNoaWxkcmVuWzI2XSk7IC8vIGFycmF5IG9mIHBvaW50ZXJzCiAgICBOb2RlKCkgeyBjb3VudCA9IDA7IGZvciAoaW50IGkgPSAwOyBpIDwgMjY7IGkrKykgY2hpbGRyZW5baV0gPSBOVUxMOyB9Owp9OwoKdm9pZCBhZGQoY2hhciAqcywgTm9kZSAmbikKewogICAgaWYgKCpzID09IDApIC8vIG51bGwtdGVybWluYXRvcgogICAgICByZXR1cm47CiAgICBpZiAobi5jaGlsZHJlblsqcy0nYSddID09IE5VTEwpCiAgICAgIG4uY2hpbGRyZW5bKnMtJ2EnXSA9IG5ldyBOb2RlKCk7CiAgICBuLmNvdW50Kys7CiAgICBhZGQocysxLCAqbi5jaGlsZHJlblsqcy0nYSddKTsKfQoKdm9pZCBwcmludChjaGFyICpzdGFydCwgY2hhciAqZW5kLCBOb2RlICZuKQp7CiAgICBpZiAobi5jb3VudCA9PSAxKQogICAgewogICAgICAgICplbmQgPSAwOyAvLyBudWxsLXRlcm1pbmF0b3IKICAgICAgICBjb3V0IDw8IHN0YXJ0IDw8IGVuZGw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNjsgaSsrKQogICAgewogICAgICAgIGlmIChuLmNoaWxkcmVuW2ldICE9IE5VTEwpCiAgICAgICAgewogICAgICAgICAgICAqZW5kID0gKGNoYXIpKGkrJ2EnKTsKICAgICAgICAgICAgcHJpbnQoc3RhcnQsIGVuZCsxLCAqbi5jaGlsZHJlbltpXSk7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGNoYXIgKnMgPSAic3RhY2tvdmVyZmxvdyI7CiAgICBOb2RlIHJvb3Q7CiAgICBhZGQocywgcm9vdCk7CiAgICBzID0gInN0YW5kdXAiOwogICAgYWRkKHMsIHJvb3QpOwogICAgY2hhciBvdXRwdXRbMTAwMF07IC8vIGJpZyBidWZmZXIKICAgIHByaW50KG91dHB1dCwgb3V0cHV0LCByb290KTsKfQoK