#include <iostream>
#include <vector>

std::vector<char> file;

void load_data()
{
    int amount;
    std::cin >> amount;

    for (int i = 0; i < amount; i++)
    {
        char c;
        std::cin >> c;
        file.push_back(c);
    }

    /*char c;
    while(std::cin >> c)
    {
        file.push_back(c);
    }*/
}

int subsequences()
{
    if (file.size() < 9) return 0;

    int subsequences_count = 0;
    int actual_size = 3;

    for (int color_schemes = 0; color_schemes < 2; color_schemes++)
    {
        actual_size = 3;

        //int color_in = color_schemes;
        //int color_out = (color_schemes == 0) ? 1 : 0;

        char color_in = (color_schemes == 0) ? 'X' : 'O';
        char color_out = (color_schemes == 0) ? 'O' : 'X';

        while (true)
        {
            size_t needed_files = actual_size * actual_size;
            if (needed_files > file.size()) break;

            int needed_in_color = (actual_size - 2) * (actual_size - 2);
            int needed_out_color = needed_files - needed_in_color;
            //std::cout << "actual_size: " << actual_size << '\n';

            int in_color_counter = 0;
            int out_color_coutner = 0;

            int i = 0;
            for ( ; i < needed_files; i++)
            {
                if (file[i] == color_in) in_color_counter++;
                if (file[i] == color_out) out_color_coutner++;
            }

            if (needed_in_color == in_color_counter && needed_out_color == out_color_coutner)
            {
                subsequences_count++;
                //std::cout << actual_size << " in_color_counter: " << in_color_counter << " out_color_coutner: " << out_color_coutner << " actual index: " << i << '\n';
            }

            for ( ; i < file.size(); i++)
            {
                if (file[i - needed_files] == color_in) in_color_counter--;
                if (file[i - needed_files] == color_out) out_color_coutner--;

                if (file[i] == color_in) in_color_counter++;
                if (file[i] == color_out) out_color_coutner++;

                /*for (int j = i; j < i + needed_files; j++)
                {
                    if (file[j] == color_in) in_color_counter++;
                    if (file[j] == color_out) out_color_coutner++;
                }*/

                /*std::cout << "needed_in_color: " << needed_in_color << '\n';
                std::cout << "needed_out_color: " << needed_out_color << '\n';

                std::cout << "in_color_counter: " << in_color_counter << '\n';
                std::cout << "out_color_coutner: " << out_color_coutner << '\n';*/

                if (needed_in_color == in_color_counter && needed_out_color == out_color_coutner)
                {
                    subsequences_count++;
                    //std::cout << actual_size << " in_color_counter: " << in_color_counter << " out_color_coutner: " << out_color_coutner << " actual index: " << i << '\n';
                }
            }

            actual_size++;
        }
    }

    return subsequences_count;
}

int main()
{
    load_data();

    std::cout << subsequences() << '\n';

    /*for (int i = 0; i < file.size(); i++)
    {
        std::cout << file[i] << '\n';
    }*/

    return 0;
}