K: Relief (Angel Relief)

Tenma, an angel, decides to save a city.

The city has a rectangular shape divided into north-south $ H $ parcels x east-west $ W $ parcels, with houses in each parcel.

The $ X $ th section from the north and the $ Y $ th section from the west are represented by $ (X, Y) $.

The house in parcel $ (i, j) $ is inhabited by $ A_ {i, j} $ people.

Tenshin chooses a rectangular area whose sides are parallel or vertical to north-south or east-west, and rescues all the people living in it one by one.

Tenshin does this for every possible rectangle.

Find the total number of times Tenma-san rescues people.

input

The integers $ H, W $ are given on the first line, separated by blanks.

Of the following $ H $ lines, the integers $ A_ {i, 1}, A_ {i, 2}, A_ {i, 3}, \ dots, A_ {i, W} $ are blank on the $ i $ line. Given as a delimiter.

output

Output the total number of times Tenma-san rescues people.

Constraint

* $ H, W $ are integers between $ 1 $ and $ 500 $
* $ A_ {i, j} $ are all integers greater than or equal to $ 1 $ and less than or equal to $ 9 $.



Input example 1


twenty two
1 2
4 8


Output example 1


60


For example, if you choose a rectangular area with $ (1, 1) $ in the upper left and $ (2, 2) $ in the lower right, you will rescue $ 15 $ people there one by one, so a total of $ 15 $ times. Relief.

$ 1, 2, 3, 4, 5, 8, 10, 12, 15 $ relief for each of the $ 9 $ rectangular areas, for a total of $ 60 $.

Input example 2


twenty three
one two Three
4 5 6


Output example 2


140






Example

Input

2 2
1 2
4 8


Output

60
#include<bits/stdc++.h>
#define INF 1e9
#define llINF 1e18
#define MOD 1000000007
#define pb push_back
#define mp make_pair 
#define F first
#define S second
#define ll long long
#define ull unsigned long long
#define vi vector<ll>
#define vvi vector<vi>
#define BITLE(n) (1LL<<(n))
#define BITCNT(n) (__builtin_popcountll(n))
#define SUBS(s,f,t) ((s).substr((f)-1,(t)-(f)+1))
#define ALL(a) (a).begin(),(a).end()
using namespace std;
struct Grid{ll x,y,t;};
struct Edge{ll to,cost;};
struct Graph{vector<vector<Edge>>E;int V;
  const ll Inf = llINF;const int MAX_V=201010;vector<ll>d;
  Graph(int n):E(n){d.resize(MAX_V);E.resize(n);V=n;}
  void init(){for(int i=0;i<MAX_V;i++)d[i]=Inf;}
  void add_edge(ll from,ll to,ll cost){E[from].pb({to,cost});}
};
ll kake[1000][1000];
int main(){
  cin.tie(0);
  ios::sync_with_stdio(false);
  ll h,w;cin>>h>>w;
  ll ans=0;
  for(int i=0;i<h/2+(h%2);i++){
    for(int j=0;j<w/2+(w%2);j++){
      kake[i][j]=(h-i)*(i+1)*(w-j)*(j+1);
      if(h%2==1&&i==h/2*(h%2) && w%2==1&&j==w/2*(w%2)){
      }else if(h%2==1&&i==h/2*(h%2)){
	kake[i][w-j-1]=(h-i)*(i+1)*(w-j)*(j+1);
      }else if(w%2==1&&j==w/2*(w%2)){
	kake[h-i-1][j]=(h-i)*(i+1)*(w-j)*(j+1);
      }else{
	kake[h-i-1][j]=(h-i)*(i+1)*(w-j)*(j+1);
	kake[h-i-1][w-j-1]=(h-i)*(i+1)*(w-j)*(j+1);
	kake[i][w-j-1]=(h-i)*(i+1)*(w-j)*(j+1);
      }
    }
  }

  for(int i=0;i<h;i++){
    for(int j=0;j<w;j++){
      ll num;
      cin>>num;
      ans+=num*kake[i][j];
    }
  }
  cout<<ans<<endl;
  return 0;
}

