#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>

const unsigned int pass_number = 10;
const int max_x = 20;
const int max_y = 20;

template<int>
bool in_figure(int x, int y);

template<>
bool in_figure<1>(int x, int y)
{
    return y < max_y && x < max_x && (x + y - max_y + 1) >= 0;
}

template<>
bool in_figure<2>(int x, int y)
{
    return y < max_y && x < max_x && (x + y - max_y + 1) >= 0 && (y - x) >= 0;
}

int main()
{
    char buffer[max_y][max_x];

    srand(time(0));
    memset(buffer, ' ', max_y * max_x);

    for (unsigned pass = 0; pass < pass_number; ++pass)
        for (int y = 0; y < max_y; ++y)
            for (int x = 0; x < max_x; ++x)
                if (buffer[y][x] != 'x')
                    if ((rand() % (pass_number / 3) == 0) && in_figure<1>(x, y))
                        buffer[y][x] = (buffer[y][x] == ' ')?'.':(buffer[y][x] == '.')?'v':'x';

    for (int y = 0; y < max_y; ++y)
    {
        for (int x = 0; x < max_x; ++x)
            std::cout << buffer[y][x];
        std::cout << std::endl;
    }
}
