#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define fi first #define se second #define pb push_back #define y1 kjfasiv #define lowbit(x) (x&-x) #define debug(x) cout<<#x<<"="< pii; typedef pair pll; typedef vector veci; typedef complex Com; const int mod=(int)1e9+7,INF=0x7fffffff,rx[]={-1,0,1,0},ry[]={0,1,0,-1}; const double pi=acos(-1.0),eps=1e-8; templatevoid rd(T &res){ res=0; char c; while(c=getchar(),c<48); do res=res*10+(c^48); while(c=getchar(),c>47); } templatevoid rec_print(T x){ if(!x)return; rec_print(x/10); putchar(x%10^48); } templatevoid print(T x){ if(!x)putchar('0'); else rec_print(x); } templateinline void Max(T &a,T b){ if(b>a)a=b; } templateinline void Min(T &a,T b){ if(b=mod)a-=mod; } int fast_mod_pow(int a,int b){ int res=1; for(;b;b>>=1,a=1ll*a*a%mod) if(b&1)res=1ll*res*a%mod; return res; } const int N=(int)1e3+5; int num[N][N],a[N][N],b[N][N],c[N][N],d[N][N]; uint sum[N][N]; pii stk[N]; inline uint sigma(uint n){ return n*(n+1)>>1; } void init(){ for(uint i=1;inum[i][j])--top; a[i][j]=j-stk[top].fi; stk[++top]=pii(j,num[i][j]); } stk[top=0].fi=m+1; for(int j=m;j>=1;j--){ while(top&&stk[top].se>num[i][j])--top; b[i][j]=stk[top].fi-j; stk[++top]=pii(j,num[i][j]); } } for(int i=1;i<=m;i++){ int top=0; stk[top].fi=0; for(int j=1;j<=n;j++){ while(top&&stk[top].se=1;j--){ while(top&&stk[top].se