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

题目描述

现有一个大小为n\times m的二维矩阵,每个元素s_{i,j}可能是字符'0'、'1'。
阿宁一开始站在(1,1),目标走到(n,m)
假设当前在(x,y),一个相邻位置(x',y')上下左右 相邻。可以进行以下其中一个行为,花费一个单位时间:
1. 如果s_{x,y}是'0',s_{x',y'}是'1',可以从(x,y)走到(x',y')
2. 如果s_{x,y}是'1',s_{x',y'}是'0',可以从(x,y)走到(x',y')
3. 将s_{x',y'}变成'1'。
4. 将s_{x',y'}变成'0'。

问阿宁从(1,1)走到(n,m)需要最少多少单位时间?

输入描述:

第一行输入两个正整数n,m
接下来输入n行,每行m个字符,字符仅包含'0'、'1'。
1\leq n, m \leq 10^3

输出描述:

输出一个整数。
示例1

输入

复制
4 4
1111
1111
1010
0101

输出

复制
7

说明

一开始在(1,1)。将s_{2,1}变成'0',走到(2,1),走到(3,1),走到(3,2),走到(4,2),走到(4,3),走到(4,4)
示例2

输入

复制
4 4
0001
0010
0001
0010

输出

复制
7