#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