#include using namespace std; const int nMax = 50003; const int DIM = 26; int n, m; int v[nMax][DIM]; int64_t ans[nMax]; int id[nMax]; void setupp(int j) { for (int i = 0; i < n; ++i) id[i] = i; sort(id, id + n, [&] (const int &a, const int &b) { return v[a][j] < v[b][j]; }); } int main() { #ifndef ONLINE_JUDGE freopen("cutit.in", "r", stdin); #endif // ONLINE_JUDGE scanf("%d%d", &n, &m); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) scanf("%d", &v[i][j]); } for (int j = 0; j < m; ++j) { setupp(j); int64_t sum = 0; for (int p = 0; p < n; ++p) { int i = id[p]; if (p != 0) { ans[i] += (1LL * v[i][j] * p) - sum; } sum += v[i][j]; } sum = 0; for (int p = n - 1; p >= 0; --p) { int i = id[p]; if (p != n - 1) { ans[i] += sum - 1LL * v[i][j] * (n - p - 1); } sum += v[i][j]; } } long long mn = 1e18; int nr = 0; for (int i = 0; i < n; ++i) if (ans[i] < mn) mn = ans[i], nr = 1; else if (ans[i] == mn) ++nr; printf("%lld\n", mn); printf("%d\n", nr); vector>sol; vectorcur; for (int i = 0; i < n; ++i) if (ans[i] == mn) { cur.clear(); for (int j = 0; j < m; ++j) cur.push_back(v[i][j]); sol.push_back(cur); } sort(sol.begin(), sol.end()); for (const auto& i : sol) { for (const auto& j : i) printf("%d ", j); printf("\n"); } return 0; }