#include #include #include using namespace std; int v[50000][25]; long long dmin[50000]; int m, n; struct SEntry { int val, id; }; struct Sir { SEntry v[50000]; long long sum; } s[25]; bool cmp(const SEntry& a, const SEntry& b) { return a.val < b.val; } bool cmp2(const int& a, const int& b) { for(int i = 0; i < n; i++) if(v[a][i] < v[b][i]) return true; else if(v[a][i] > v[b][i]) return false; return true; } int main() { //freopen("expk.in", "r", stdin); scanf("%d%d", &m, &n); int i, j; for(i = 0; i < m; i++) { for(j = 0; j < n; j++) { scanf("%d", &v[i][j]); s[j].v[i].val = v[i][j]; s[j].v[i].id = i; s[j].sum += v[i][j]; } } for(j = 0; j < n; j++) { sort(s[j].v, s[j].v + m, cmp); long long st = 0; for(i = 0; i < m; i++) { s[j].sum -= s[j].v[i].val; long long sc = (s[j].v[i].val * i - st) + (s[j].sum - s[j].v[i].val * (m - i - 1)); dmin[s[j].v[i].id] += sc; st += s[j].v[i].val; } } long long vmin = 50000LL * 1000000000 + 1000; vector sol; for(i = 0; i < m; i++) { if(dmin[i] < vmin) { sol.clear(); sol.push_back(i); vmin = dmin[i]; } else if(dmin[i] == vmin) sol.push_back(i); } sort(sol.begin(), sol.end(), cmp2); int lg = sol.size(); printf("%lld\n%d\n", vmin, lg); for(i = 0; i < lg; i++) { for(j = 0; j < n; j++) printf("%d ", v[sol[i]][j]); printf("\n"); } return 0; }