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

题目描述

国际象棋,是一种二人对弈的棋类游戏。棋盘为正方形,由 64 个黑白相间的格子组成。棋子分黑白(深色与浅色)两方共 32 枚,每方各 16 枚。它起源于亚洲,后由阿拉伯人传入欧洲,成为国际通行棋种,也是一项智力竞技运动,曾被列为奥林匹克运动会正式比赛项目。

玩腻了常规国际象棋的 zhcccd 想要在草坪上制作一个超大型的 n*m 的棋盘,行和列从 1 开始编号,(i,j) 表示第 i 行第 j 列所在格子。但是由于他们的疏忽,染色时并没有染成任意相邻两个格子颜色不同的棋盘。现在 zh 找来了修理工007来修棋盘(修理成任意相邻格子不同色)。修理工从 (1,1) 格出发,每一步都可以从当前格子走到上下左右的格子(不能越界,每个格子可以重复走),修理工有两种操作

1.当走到某个格子时所使用的步数为奇数时,他可以把格子修理成黑色。

2.当走到某个格子时所使用的步数为偶数时,他可以把格子修理成白色。

修理工非常勤劳,他向 zh 承诺一天可以走 998244353 步。他们想花费 \textbf{最少}\textbf{修理次数} 来把棋盘修理成任意两个相邻格子不同颜色的棋盘。zh想知道修理工一天是否可以把棋盘修理成想要的样子,但是由于 zhcccd 忙碌了一天身心疲惫,于是他找到你来帮他解决这个问题。如果可以,输出 \textbf{最少}\textbf{修理次数} ,如果不行则输出-1。


输入描述:

第一行输入 nm (1 \le n,m \le 1000)---代表棋盘的大小;

接下来输入 n 行,每行 m 个字符,第 i 行第 j 列为 1 代表当前棋盘格子是黑色,为 0 代表当前棋盘格子是白色。


输出描述:

如果修理成功输出\textbf{最少的修理次数},反之则输出\textbf{-1}
示例1

输入

复制
3 3
101
010
101

输出

复制
0
示例2

输入

复制
1 3
111

输出

复制
2