#4. 游泳练习

游泳练习

题目描述

小蓝正在一个游泳池里练习游泳,这个游泳池的长度为 nn,且共有 mm 个泳道。他想要从泳池的最上方游到泳池的最下方。

但是,有一些调皮的孩子在泳池中玩耍,堵塞了泳道,导致中途需要停下更换泳道,才能继续通行。

小蓝在游泳过程中可以停下更换泳道(左右移动),且每移动一格算作更换一次泳道。也可以一直朝着终点游(向下移动),期间不增加泳道更换次数。无论什么时候,小白都不会往回游(向上移动)。

小蓝并不想频繁地在练习途中更换泳道,这样会影响他的练习效果的。他想请你帮忙,找出更换泳道次数最少的游泳方案,并告诉他最少更换几次泳道能到达终点。如果无论怎样都无法到达终点,输出 No。

输入格式

第一行包含两个整数 n,mn, m,分别表示泳池长度与泳道数量。

接下来共 nn 行 mm 列,每行 mm 个 0 或 1,0 表示此处为空,1 表示此处有一群调皮的孩子堵住了泳道。数据保证最上面一行至少有一个点为 0。小蓝将从泳池的第 1 行出发。

输出格式

一行一个整数 kk,表示小蓝最少的更换泳道次数。

4 4
1 0 0 1
0 1 0 1
0 0 0 0
0 0 1 0
1
4 3
1 0 1
0 1 0
0 0 0
1 0 0
No

样例 1 说明

从点(1,3)出发,一直游到(3,3),更换泳道到(3,2),然后一直往前游,到达终点,共更换1次泳道。

样例 2 说明

点(1,1)、(2,2)、(1,3)都被堵住,无法到达终点。

数据范围

2≤n,m≤1032 \leq n,m \leq 10^3