#include size_t square(size_t n) { return n * n; } size_t subseqCnt(const std::string& tiles) { size_t subseqCnt = 0u; const size_t tileCnt = tiles.size(); for (size_t sideLen = 3u; square(sideLen) <= tileCnt; ++sideLen) { size_t xCnt = 0u; size_t i = 0u; const size_t squareTiles = square(sideLen); while (i < squareTiles) { if (tiles.at(i++) == 'X') ++xCnt; } bool isPatio = xCnt == 4 * (sideLen - 1) || xCnt == square(sideLen - 2); if (isPatio) ++subseqCnt; while (i < tileCnt) { char newTile = tiles.at(i); if (isPatio && newTile == tiles.at(i - squareTiles)) { ++subseqCnt; ++i; continue; } xCnt += (newTile == 'X') ? 1 : -1; isPatio = xCnt == 4 * (sideLen - 1) || xCnt == square(sideLen - 2); if (isPatio) ++subseqCnt; ++i; } } return subseqCnt; } int main() { size_t tileCnt; std::string tiles; std::cin >> tileCnt >> tiles; std::cout << subseqCnt(tiles) << std::endl; return 0; }