#include #include #include #include #include #include #include const int MAXM = 50004; const int MAXN = 26; int m, n; int loc[MAXM][MAXN]; long long dists[MAXM]; using namespace std; long long compute(int a, int b) { long long ans = 0; for (int i = 0; i < n; ++i) { int d = (loc[a][i] - loc[b][i]); if (d >= 0) ans += d; else ans -= d; } return ans; } int main() { scanf("%d %d", &m, &n); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { scanf("%d", &loc[i][j]); } } memset(dists, 0, sizeof(dists)); for (int i = 0; i < m; ++i) { for (int j = i + 1; j < m; ++j) { long long d = compute(i, j); dists[i] += d; dists[j] += d; } } long long min_dist = 1e18; int ans = 0; for (int i = 0; i < m; ++i) { if (dists[i] < min_dist) { ans = 0; min_dist = dists[i]; } if (dists[i] == min_dist) ++ans; } printf("%lld\n%d\n", min_dist, ans); vector > out(ans, vector()); for (int i = 0; i < m; ++i) { if (dists[i] == min_dist) { for (int j = 0; j < m; ++j) { out[i].push_back(loc[i][j]); } } } sort(out.begin(), out.end()); for (int i = 0; i < ans; ++i) { for (int j = 0; j < n - 1; ++j) { printf("%d ", out[i][j]); } printf("%d\n", out[i][n - 1]); } return 0; }