犹太棋(Hard Version)
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

本题是 H 题的 hard 版本,在这个版本中,初始棋盘可能存在棋子。

"犹太棋"是一种经典的巴什博弈游戏,本题的游戏由其玩法改编而来。你并不需要了解关于"犹太棋"的知识,只需要仔细阅读以下的规则说明:

有一个长为 n ,宽为 1 的棋盘,现在给定一个初始局面,某些地方已经有了棋子,  选手和  选手开始下棋,双方轮流行动,  先手。

每一次,当前行动的人可以选择连续的一段、没有棋子的、长度不大于 3 的 x 个位置,将这些位置都放上一枚棋子,最先不能操作的人判负。

现在  想要知道,如果双方都足够聪明,她是否是先手必胜的?

如果是,输出"YES";否则,输出"NO"。

输入描述:

第一行一个正整数  表示棋盘大小。

接下来一行是一个长度为 n 的由 0 和 1 构成的字符串,1  表示这个地方已经有了棋子, 0 表示这个地方没有棋子。

输出描述:

一行"YES",或者"NO"(均不包含引号),表示答案。
示例1

输入

复制
5
00100

输出

复制
NO