G:字符串
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小 Z 有一个字符串 S,字符串只包含三种数字字符 `0,1,2`。

现在给出一个定义:一个字符串是**优雅的**,当且仅当没有相邻的两个字符是相同的。

- 例如,字符串 `01220` 不是优雅的,因为有两个相邻的 `2`,字符串 `01020102120` 是优雅的。

小 Z 每一次可以交换字符串 S 中任意一对相邻的字符,问把字符串 S 变成**优雅的**的至少需要操作几次?如果字符串 S 原本就是优雅的,则输出 `0`。

输入描述:

输入一行一个字符串 S,其中只包含三种字符 `0,1,2`。

输出描述:

输出一行一个整数,表示最少操作次数。如果不需要操作,则输出 `0`,如果无解输出 `-1`。
示例1

输入

复制
0000120202010210211110212202020222222200000111111000001112222000012120102012010201200

输出

复制
55
示例2

输入

复制
00122

输出

复制
2
示例3

输入

复制
0101020002

输出

复制
-1

备注:

对于 30\% 的数据,1 \leq |S| \leq 12

对于另外 30\% 的数据,S0 的个数大于 \lfloor \frac{|S|}{2} \rfloor

对于 100\% 的数据,1 \leq |S| \leq 400