小红的好01串修改
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小红定义一个仅由字符 \texttt{`0'}\texttt{`1'} 组成的字符串(简称 01 串)为好 01 串,当且仅当:任意两个相邻的字符都是不同的。

\hspace{15pt}现在,小红拿到了一个长为 n 的 01 串,他想要将其变成一个好 01 串。为此,他可以进行以下操作:
\hspace{23pt}\bullet\,选择两个相邻的字符(长度为 2 的子串),将它们反置(若原字符为 \texttt{`1'},反置后为 \texttt{`0'};若原字符为 \texttt{`0'},反置后为 \texttt{`1'})。

\hspace{15pt}小红想知道是否能将原串变为好 01 串,如果可以,最少需要进行几次操作。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^3\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行输入一个整数 n\left(1\leqq n\leqq 2\times 10^5\right),代表字符串长度。
\hspace{15pt}第二行输入一个长度为 n 的 01 串 s

\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 2\times 10^6

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行,输出一个整数,代表在规定操作下将原字符串变为好 01 串所需的最少操作次数;若无法实现,则输出 -1
示例1

输入

复制
3
5
10101
3
111
4
1110

输出

复制
0
2
-1

说明

\hspace{15pt}对于第一组测试数据,原 01 串已经是好 01 串,不需要操作。

\hspace{15pt}对于第二组测试数据,其中一种最优操作方案是:
\hspace{23pt}\bullet\,选择第二个和第三个字符修改,字符串变为 \texttt{
\hspace{23pt}\bullet\,选择第一个和第二个字符修改,字符串变为 \texttt{,此时是好 01 串。