#include <iostream>
#include <sys/time.h>

void findAllSubstrings(const char *s)
{
    int x=0;
    while(*(s+x)){
        for(int y=0; y<=x; y++)
            std::cout<<*(s+y);
        std::cout<<'\n';
        x++;
    }
    if(*(s+1))
        findAllSubstrings(s+1);
    else
        return;
}

void findAllSubstrings2(const char *s)
{
    while(*s)
    {
        int x=0;
        while(*(s + x))
        {
            for(int y = 0; y <= x; y++)
                std::cout << *(s + y);
            std::cout << "\n";
            x++;
        }
        s++;
    }
}

int main()
{
    timeval t1,t2;

    gettimeofday(&t1,0);
    for(int t = 0; t < 1000; t++)
        findAllSubstrings("abc");
    gettimeofday(&t2,0);

    std::cout << "\n\n1: Time per call: "
        << ((t2.tv_sec-t1.tv_sec)*1000000 + t2.tv_usec-t1.tv_usec) / 1000.0
        << " us\n";


    gettimeofday(&t1,0);
    for(int t = 0; t < 1000; t++)
        findAllSubstrings2("abc");
    gettimeofday(&t2,0);

    std::cout << "\n\n2: Time per call: "
        << ((t2.tv_sec-t1.tv_sec)*1000000 + t2.tv_usec-t1.tv_usec) / 1000.0
        << " us\n";


    return 0;
}

