#SDNU1618. The Guo

The Guo

Description

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

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

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

在锅精的世界里比赛是一张n ×\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

2 2
0 1
1 0
5
1 3
1 1 1
3
3 2
1 0
1 0
0 1
7

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;
}