#SDNU1619. The Super Guo

The Super Guo

Cannot parse: 10000 MS error parsing time

Description

“2020 SDNU-ACM 新生月赛”现已开始。

在师哥/师姐的重重把关下,比赛中所有可能出现的锅均已被消灭。

但秉持着“没有锅的比赛不是好比赛”的观念,锅精决定来造访一下。

在锅精的世界里比赛是一张n×mn\times m的地图。锅精每到一个地方便会丢下若干口锅,俗称“甩锅”(bushi.

锅精离开之后,地图上每个点有着多多少少的锅。

身为社会主义优秀青年的你自然不会容忍锅的存在,于是自告奋勇来修锅。

每次修锅,你可以选择一个含有锅的位置出发,沿着含有锅的相邻格子(相邻指上下左右相邻)走下去;之后你可以将所有走过的位置上所有的锅消灭,花费为此次消灭掉锅的数量。由于你体力有限,每修锅之后,都需要休息一次。

可锅精早已预料到这一切,他给所有的锅下了锅咒,每当你休息一次,每个有锅的位置上会增加一口锅!

现在你需要安排一个修锅顺序使得总的花费最小。

Format

Input

第一行输入两个整数 n,m
接下来输入n行,每行m个整数表示锅精离开后地图每个点上锅的数量,记g[i][j]表示第i行第j列锅的数量。 $1\leq n,m,n\times m\leq 10^7,0\leq g[i][j]\leq 10^7$

Output

输出一个整数表示最小花费

Samples

3 2
1 0
1 0
0 1
4

Hints

由于输入数据量比较大,推荐使用以下方式读入

int read() {   int f = 1, x = 0;   char ch = getchar();   while(!isdigit(ch))   {     if(ch == '-') f = -1;     ch = getchar();   }   while(isdigit(ch))   {     x = x * 10 + ch - '0';     ch = getchar();   }   return x * f; }

int main() {   int n = read(), m = read();   ......   return 0; }