#include <bits/stdc++.h>
#define F first
#define S second
#define B break
#define C continue
#define R return
#define be(a) a.begin(),a.end()
#define fast ios::sync_with_stdio(NULL); cin.tie(0); cout.tie(0);
#define endl "\n"
using namespace std;
int T,_t=1,n,i,j,k,x,y,m,ans;
int b[10][2],d[2002][2300],c[2002][2300],sum[2002][520],a[2002][10];
vector<int>v[10];
vector<pair<int,int> >nxt[10][3000];
string s,t,bin[10][1000];
vector<string>st[10];
vector<int>ind[10];
int mask,nofgrp,newmask;
void gen(int i,string s){
int j;
if(i==m) {
int mask=0,nofgrp=1+(m+1)/2;
for(j=0;j<m;j++) {
mask=mask*nofgrp+s[j]-'0';
}
ind[m][mask]=v[m].size();
v[m].emplace_back(mask);
R ;
}
gen(i+1,s+'0');
if(i&&s[i-1]!='0')
gen(i+1,s+s[i-1]);
else {
int x=1;
for(j=0;j<i;j++)
x=max(x,s[j]-'0'+1);
for(x;x>0;x--)
gen(i+1,s+char('0'+x));
}
}
void dfs(int i,int j,int x){
if(i<0||i==m||b[i][j]!=-1) R ;
b[i][j]=x;
dfs(i,1^j,x);
dfs(i-1,j,x);
dfs(i+1,j,x);
if(j==0) {
for(int k=j+1;k<m;k++)
if(s[i]==s[k])
dfs(k,j,x);
}
}
string getString(int mask,int m){
string s="";
int nofgrp=1+(m+1)/2;
for(int i=0;i<m;i++)
s+='0'+mask%nofgrp,
mask/=nofgrp;
reverse(be(s));
R s;
}
string getBin(int mask,int m){
string s="";
for(int i=0;i<m;i++)
if((1<<i)&mask) s+='1';
else s+='0';
reverse(be(s));
R s;
}
int dp(int i,int mask) {
string &s=st[m][mask];
if(i==n) {
for(int j=0;j<m;j++) {
if(s[j]>'1')
R -1e9;
}
R 0;
}
int in=ind[m][mask];
int &ret=d[i][in];
if(c[i][in]==T) R ret;
c[i][in]=T;
ret=-1e9;
int j;
for(j=0;j<m;j++)
if(s[j]>'1')
B;
if(j==m)
ret=0;
for(auto it:nxt[m][in]){
ret=max(ret,sum[i][it.F]+dp(i+1,it.S));
}
R ret;
}
int ff(){
k=-1e9;
cin>>n>>m;
for(i=0;i<n;i++) {
for(j=0;j<m;j++) {
cin>>a[i][j];
k=max(k,a[i][j]);
}
}
if(k<0) R cout<<k,0;
for(i=0;i<n;i++) {
for(mask=0;mask<(1<<m);mask++) {
x=0;
for(j=0;j<m;j++)
if((1<<j)&mask)
x+=a[i][m-1-j];
sum[i][mask]=x;
}
}
ans=dp(0,0);
cout<<ans;
R 0;
}
int main()
{
fast
///resize
for(m=1;m<=9;m++){
x=1;
y=1+(m+1)/2;
for(i=1;i<=m;i++){
x*=y;
}
st[m] .resize(x);
ind[m].resize(x);
}
///resize done
///generate masks
for(m=1;m<=9;m++){
gen(0,"");
}
///done
///store strings
for(m=1;m<=9;m++){
for(auto mask1:v[m]){
st[m][mask1]=getString(mask1,m);
}
for(mask=0;mask<(1<<m);mask++) {
bin[m][mask]=getBin(mask,m);
}
}
///store done
///find next mask
for(m=1;m<=9;m++) {
for(auto mask1:v[m]){
s=st[m][mask1];
for(mask=0;mask<(1<<m);mask++) {
///check
string &t=bin[m][mask];
for(i=0;i<=m;i++) b[i][0]=0;
for(i=0;i<m;i++)
if(t[i]=='1')
b[s[i]-'0'][0]=1;
for(i=0;i<m;i++)
if(s[i]!='0'&&b[s[i]-'0'][0]==0)
B;
if(i!=m)
C;
///check done
///memset
for(i=0;i<m;i++){
if(s[i]=='0') b[i][0]=0;
else b[i][0]=-1;
if(t[i]=='0') b[i][1]=0;
else b[i][1]=-1;
}
///memset done
///dfs
x=0;
for(i=0;i<m;i++){
if(t[i]=='1'&&b[i][1]==-1){
x++;
dfs(i,1,x);
}
}
///dfs done
///store
nofgrp=1+(m+1)/2,newmask=0;
for(i=0;i<m;i++)
newmask=newmask*nofgrp+b[i][1];
j=ind[m][mask1];
nxt[m][j].emplace_back(make_pair(mask,newmask));
}
}
}
cin>>_t;
for(T=1;T<=_t;T++){
ff();
cout<<endl;
}
R 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgQiBicmVhawojZGVmaW5lIEMgY29udGludWUKI2RlZmluZSBSIHJldHVybgojZGVmaW5lIGJlKGEpIGEuYmVnaW4oKSxhLmVuZCgpCiNkZWZpbmUgZmFzdCBpb3M6OnN5bmNfd2l0aF9zdGRpbyhOVUxMKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiNkZWZpbmUgZW5kbCAiXG4iCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBULF90PTEsbixpLGosayx4LHksbSxhbnM7CmludCBiWzEwXVsyXSxkWzIwMDJdWzIzMDBdLGNbMjAwMl1bMjMwMF0sc3VtWzIwMDJdWzUyMF0sYVsyMDAyXVsxMF07CnZlY3RvcjxpbnQ+dlsxMF07CnZlY3RvcjxwYWlyPGludCxpbnQ+ID5ueHRbMTBdWzMwMDBdOwpzdHJpbmcgcyx0LGJpblsxMF1bMTAwMF07CnZlY3RvcjxzdHJpbmc+c3RbMTBdOwp2ZWN0b3I8aW50PmluZFsxMF07CmludCBtYXNrLG5vZmdycCxuZXdtYXNrOwp2b2lkIGdlbihpbnQgaSxzdHJpbmcgcyl7CiAgICBpbnQgajsKICAgIGlmKGk9PW0pIHsKICAgICAgICBpbnQgbWFzaz0wLG5vZmdycD0xKyhtKzEpLzI7CiAgICAgICAgZm9yKGo9MDtqPG07aisrKSB7CiAgICAgICAgICAgIG1hc2s9bWFzaypub2ZncnArc1tqXS0nMCc7CiAgICAgICAgfQogICAgICAgIGluZFttXVttYXNrXT12W21dLnNpemUoKTsKICAgICAgICB2W21dLmVtcGxhY2VfYmFjayhtYXNrKTsKICAgICAgICBSIDsKICAgIH0KICAgIGdlbihpKzEscysnMCcpOwogICAgaWYoaSYmc1tpLTFdIT0nMCcpCiAgICAgICAgZ2VuKGkrMSxzK3NbaS0xXSk7CiAgICBlbHNlIHsKICAgICAgICBpbnQgeD0xOwogICAgICAgIGZvcihqPTA7ajxpO2orKykKICAgICAgICAgICAgeD1tYXgoeCxzW2pdLScwJysxKTsKICAgICAgICBmb3IoeDt4PjA7eC0tKQogICAgICAgICAgICBnZW4oaSsxLHMrY2hhcignMCcreCkpOwogICAgfQp9CnZvaWQgZGZzKGludCBpLGludCBqLGludCB4KXsKICAgIGlmKGk8MHx8aT09bXx8YltpXVtqXSE9LTEpIFIgOwogICAgYltpXVtqXT14OwogICAgZGZzKGksMV5qLHgpOwogICAgZGZzKGktMSxqLHgpOwogICAgZGZzKGkrMSxqLHgpOwogICAgaWYoaj09MCkgewogICAgICAgIGZvcihpbnQgaz1qKzE7azxtO2srKykKICAgICAgICAgICAgaWYoc1tpXT09c1trXSkKICAgICAgICAgICAgICAgIGRmcyhrLGoseCk7CiAgICB9Cn0Kc3RyaW5nIGdldFN0cmluZyhpbnQgbWFzayxpbnQgbSl7CiAgICBzdHJpbmcgcz0iIjsKICAgIGludCBub2ZncnA9MSsobSsxKS8yOwogICAgZm9yKGludCBpPTA7aTxtO2krKykKICAgICAgICBzKz0nMCcrbWFzayVub2ZncnAsCiAgICAgICAgbWFzay89bm9mZ3JwOwogICAgcmV2ZXJzZShiZShzKSk7CiAgICBSIHM7Cn0Kc3RyaW5nIGdldEJpbihpbnQgbWFzayxpbnQgbSl7CiAgICBzdHJpbmcgcz0iIjsKICAgIGZvcihpbnQgaT0wO2k8bTtpKyspCiAgICAgICAgaWYoKDE8PGkpJm1hc2spIHMrPScxJzsKICAgICAgICBlbHNlIHMrPScwJzsKICAgIHJldmVyc2UoYmUocykpOwogICAgUiBzOwp9CmludCBkcChpbnQgaSxpbnQgbWFzaykgewogICAgc3RyaW5nICZzPXN0W21dW21hc2tdOwogICAgaWYoaT09bikgewogICAgICAgIGZvcihpbnQgaj0wO2o8bTtqKyspIHsKICAgICAgICAgICAgaWYoc1tqXT4nMScpCiAgICAgICAgICAgICAgICBSIC0xZTk7CiAgICAgICAgfQogICAgICAgIFIgMDsKICAgIH0KICAgIGludCBpbj1pbmRbbV1bbWFza107CiAgICBpbnQgJnJldD1kW2ldW2luXTsKICAgIGlmKGNbaV1baW5dPT1UKSBSIHJldDsKICAgIGNbaV1baW5dPVQ7CiAgICByZXQ9LTFlOTsKICAgIGludCBqOwogICAgZm9yKGo9MDtqPG07aisrKQogICAgICAgIGlmKHNbal0+JzEnKQogICAgICAgICAgICBCOwogICAgaWYoaj09bSkKICAgICAgICByZXQ9MDsKICAgIGZvcihhdXRvIGl0Om54dFttXVtpbl0pewogICAgICAgIHJldD1tYXgocmV0LHN1bVtpXVtpdC5GXStkcChpKzEsaXQuUykpOwogICAgfQogICAgUiByZXQ7Cn0KaW50IGZmKCl7CiAgICBrPS0xZTk7CiAgICBjaW4+Pm4+Pm07CiAgICBmb3IoaT0wO2k8bjtpKyspIHsKICAgICAgICBmb3Ioaj0wO2o8bTtqKyspIHsKICAgICAgICAgICAgY2luPj5hW2ldW2pdOwogICAgICAgICAgICBrPW1heChrLGFbaV1bal0pOwogICAgICAgIH0KICAgIH0KICAgIGlmKGs8MCkgUiBjb3V0PDxrLDA7CiAgICBmb3IoaT0wO2k8bjtpKyspIHsKICAgICAgICBmb3IobWFzaz0wO21hc2s8KDE8PG0pO21hc2srKykgewogICAgICAgICAgICB4PTA7CiAgICAgICAgICAgIGZvcihqPTA7ajxtO2orKykKICAgICAgICAgICAgICAgIGlmKCgxPDxqKSZtYXNrKQogICAgICAgICAgICAgICAgICAgIHgrPWFbaV1bbS0xLWpdOwogICAgICAgICAgICBzdW1baV1bbWFza109eDsKICAgICAgICB9CiAgICB9CiAgICBhbnM9ZHAoMCwwKTsKICAgIGNvdXQ8PGFuczsKICAgIFIgMDsKfQppbnQgbWFpbigpCnsKICAgIGZhc3QKICAgIC8vL3Jlc2l6ZQogICAgZm9yKG09MTttPD05O20rKyl7CiAgICAgICAgeD0xOwogICAgICAgIHk9MSsobSsxKS8yOwogICAgICAgIGZvcihpPTE7aTw9bTtpKyspewogICAgICAgICAgICB4Kj15OwogICAgICAgIH0KICAgICAgICBzdFttXSAucmVzaXplKHgpOwogICAgICAgIGluZFttXS5yZXNpemUoeCk7CiAgICB9CiAgICAvLy9yZXNpemUgZG9uZQogICAgLy8vZ2VuZXJhdGUgbWFza3MKICAgIGZvcihtPTE7bTw9OTttKyspewogICAgICAgIGdlbigwLCIiKTsKICAgIH0KICAgIC8vL2RvbmUKICAgIC8vL3N0b3JlIHN0cmluZ3MKICAgIGZvcihtPTE7bTw9OTttKyspewogICAgICAgIGZvcihhdXRvIG1hc2sxOnZbbV0pewogICAgICAgICAgICBzdFttXVttYXNrMV09Z2V0U3RyaW5nKG1hc2sxLG0pOwogICAgICAgIH0KICAgICAgICBmb3IobWFzaz0wO21hc2s8KDE8PG0pO21hc2srKykgewogICAgICAgICAgICBiaW5bbV1bbWFza109Z2V0QmluKG1hc2ssbSk7CiAgICAgICAgfQogICAgfQogICAgLy8vc3RvcmUgZG9uZQogICAgLy8vZmluZCBuZXh0IG1hc2sKICAgIGZvcihtPTE7bTw9OTttKyspIHsKICAgICAgICBmb3IoYXV0byBtYXNrMTp2W21dKXsKICAgICAgICAgICAgcz1zdFttXVttYXNrMV07CiAgICAgICAgICAgIGZvcihtYXNrPTA7bWFzazwoMTw8bSk7bWFzaysrKSB7CiAgICAgICAgICAgICAgICAvLy9jaGVjawogICAgICAgICAgICAgICAgc3RyaW5nICZ0PWJpblttXVttYXNrXTsKICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9bTtpKyspIGJbaV1bMF09MDsKICAgICAgICAgICAgICAgIGZvcihpPTA7aTxtO2krKykKICAgICAgICAgICAgICAgICAgICBpZih0W2ldPT0nMScpCiAgICAgICAgICAgICAgICAgICAgICAgIGJbc1tpXS0nMCddWzBdPTE7CiAgICAgICAgICAgICAgICBmb3IoaT0wO2k8bTtpKyspCiAgICAgICAgICAgICAgICAgICAgaWYoc1tpXSE9JzAnJiZiW3NbaV0tJzAnXVswXT09MCkKICAgICAgICAgICAgICAgICAgICAgICAgQjsKICAgICAgICAgICAgICAgIGlmKGkhPW0pCiAgICAgICAgICAgICAgICAgICAgQzsKICAgICAgICAgICAgICAgIC8vL2NoZWNrIGRvbmUKICAgICAgICAgICAgICAgIC8vL21lbXNldAogICAgICAgICAgICAgICAgZm9yKGk9MDtpPG07aSsrKXsKICAgICAgICAgICAgICAgICAgICBpZihzW2ldPT0nMCcpIGJbaV1bMF09MDsKICAgICAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgIGJbaV1bMF09LTE7CiAgICAgICAgICAgICAgICAgICAgaWYodFtpXT09JzAnKSBiW2ldWzFdPTA7CiAgICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICBiW2ldWzFdPS0xOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8vbWVtc2V0IGRvbmUKICAgICAgICAgICAgICAgIC8vL2RmcwogICAgICAgICAgICAgICAgeD0wOwogICAgICAgICAgICAgICAgZm9yKGk9MDtpPG07aSsrKXsKICAgICAgICAgICAgICAgICAgICBpZih0W2ldPT0nMScmJmJbaV1bMV09PS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgeCsrOwogICAgICAgICAgICAgICAgICAgICAgICBkZnMoaSwxLHgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vL2RmcyBkb25lCiAgICAgICAgICAgICAgICAvLy9zdG9yZQogICAgICAgICAgICAgICAgbm9mZ3JwPTErKG0rMSkvMixuZXdtYXNrPTA7CiAgICAgICAgICAgICAgICBmb3IoaT0wO2k8bTtpKyspCiAgICAgICAgICAgICAgICAgICAgbmV3bWFzaz1uZXdtYXNrKm5vZmdycCtiW2ldWzFdOwogICAgICAgICAgICAgICAgaj1pbmRbbV1bbWFzazFdOwogICAgICAgICAgICAgICAgbnh0W21dW2pdLmVtcGxhY2VfYmFjayhtYWtlX3BhaXIobWFzayxuZXdtYXNrKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBjaW4+Pl90OwogICAgZm9yKFQ9MTtUPD1fdDtUKyspewogICAgICAgIGZmKCk7CiAgICAgICAgY291dDw8ZW5kbDsKICAgIH0KICAgIFIgMDsKfQo=