#PN1001. 菜品排列

菜品排列

Description

小 B 是一名服务员,现在他要招待一群客人。

客人们想吃 n 道菜,每道菜是荤菜或素菜。客人们希望荤素搭配,因此他们要求:

不能连续上两道荤菜。

不能连续上两道素菜。

现在小 B 已经规划好了上菜的顺序,但他突然发现这个顺序可能不满足客人们的要求。

为了满足要求,他需要对上菜顺序进行改动。一次改动定义为:选择两道菜,将它们上菜的时机交换。

已知初始的上菜顺序。请你告诉小 B,他最少需要改动几次,才能让上菜顺序满足客人的要求。如果无论如何都无法满足,输出 -1。

Input Format

第一行一个正整数 n,表示一共有几道菜。

第二行一个长度为 n 的字符串,只由 0 和 1 构成。第 i 个字符表示,初始的上菜顺序中,第 i 道菜是荤菜还是素菜。0 表示荤菜,1 表示素菜。

Output Format

输出一行,包含一个整数,表示小 B 最少需要改动几次。

如果无论改动几次都不能让上菜顺序满足要求,输出 -1。

7
0000111
2

Hint

更多测试输入:

8

01010100

更多测试输出:

-1



数据范围

对于 10% 的数据,保证 1<=n<= 1000,且初始字符串的相邻两项不相同。

对于 40% 的数据,保证 1<=n<= 1000。

对于所有数据,保证 1<= n<= 5×105,字符串长度为 n 且只由 0 和 1 构成。

Source

2025年10月NCT-J