#include <iostream>
#include <array>

int main(int argc, char** argv)
{
    std::array<int, 101>  kolakoski = {0};
    kolakoski[0] = 1;
    kolakoski[1] = 2;

    std::size_t index = 1;
    std::size_t len = 2;

    while (len < 100)
    {
        std::size_t current_len = kolakoski[index];
        std::size_t last_len = kolakoski[index - 1];
        int last = kolakoski[len - 1];
        bool last_influenced = !(index == len - 1);

        if (current_len == 1)
        {
            kolakoski[len++] = 3 - last;
        }
        else
        {
            if (last_len == 1 && !last_influenced)
            {
                kolakoski[len++] = last;
            }
            else
            {
                kolakoski[len++] = 3 - last;
                kolakoski[len++] = 3 - last;
            }
        }
        ++index;
    }

    for(std::size_t i = 0; i < 100; ++i)
    {
        std::cout << kolakoski[i] << ' ';
    }
    std::cout << std::endl;
    return 0;
}
