#include using namespace std; using ll = int64_t; using ull = uint64_t; int n, d; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> d; vector> crs(n, vector(d)); for(int i = 0; i < n; ++i) { for(int j = 0; j < d; ++j) { cin >> crs[i][j]; } } vector> aligns; for(int u = 0; u < n-1; ++u) { vector align(d); int v = u+1; for(int i = 0; i < d; ++i) { int dx = crs[u][i] - crs[v][i]; if(dx != 0) dx /= abs(dx); align[i] = dx; } aligns.push_back(std::move(align)); } vector> bas; for(vector& a : aligns) { vector> nbas; for(vector& b : bas) { int mul = 0; for(int i = 0; i < d; ++i) { if(a[i]*b[i] == 0) continue; if(mul == 0) { mul = a[i] * b[i]; } } if(mul == 0) { nbas.push_back(b); continue; }; for(int i = 0; i < d; ++i) { if(a[i] == 0) continue; if(b[i] == 0) b[i] = a[i]*mul; if(b[i] != a[i]*mul) { //for(int i = 0; i < d; ++i) { // cout << a[i] << ' '; //} //cout << '\n'; //for(int i = 0; i < d; ++i) { // cout << b[i]; //} //cout << '\n'; //cout << "-1" << '\n'; return 0; } } a = b; } nbas.push_back(a); bas = std::move(nbas); } vector align(d); for(vector& b : bas) { for(int i = 0; i < d; ++i) { if(b[i] != 0) align[i] = b[i]; } } for(int i = 0; i < n; ++i) { for(int j = 0; j < d; ++j) { crs[i][j] *= align[j]; } } sort(begin(crs), end(crs), [](vector& a, vector& b) { int as = 0; for(int i = 0; i < d; ++i) { as += a[i]; } int bs = 0; for(int i = 0; i < d; ++i) { bs += b[i]; } return as < bs; }); //for(int i = 0; i < n; ++i) { // for(int j = 0; j < d; ++j) { // cout << crs[i][j] << ' '; // } // cout << '\n' << flush; //} for(int u = 0; u < n-1; ++u) { int v = u+1; for(int j = 0; j < d; ++j) { if(crs[u][j] > crs[v][j]) { cout << "-1" << '\n'; return 0; } } } vector med(d); for(int i = 0; i < d; ++i) { vector cs(n); for(int j = 0; j < n; ++j) { cs[j] = crs[j][i]; } sort(cs.begin(), cs.end()); med[i] = cs[n/2]; } ll td = 0; for(int i = 0; i < d; ++i) { for(int j = 0; j < n; ++j) { td += abs(med[i] - crs[j][i]); } } cerr << "td " << td << '\n'; ll bst = td; for(int i = 0; i < d; ++i) { ll x = td; for(int j = 0; j < n; ++j) { x -= abs(med[i] - crs[j][i]); } bst = min(bst, x); } cout << 2*bst << '\n'; return 0; }