//#include #include #include #include #include #include using namespace std; //ifstream cin("tema.in"); //ofstream cout("tema.out"); const int MAXN = 50000; const int MAXM = 25; const unsigned long long INFLL = 1000000000000000000LL; int m, x[1 + MAXM][1 + MAXN]; long long add[1 + MAXM][1 + MAXN]; vector solution; pair vn[1 + MAXN]; void GetDimmension(int v[], int n, int which) { for (int i = 1; i <= n; i++) vn[i] = make_pair(v[i], i); sort(vn + 1, vn + n + 1); long long sum = 0; for (int i = 1; i <= n; i++) sum += vn[i].first - vn[1].first; add[which][vn[1].second] = sum; for (int i = 2; i <= n; i++) { sum = sum + 1LL * (vn[i].first - vn[i - 1].first) * (i - 1); sum = sum - 1LL * (vn[i].first - vn[i - 1].first) * (n - i + 1); add[which][vn[i].second] = sum; } } inline bool Compare(const int &a, const int &b) { for (int i = 1; i <= m; i++) if (x[i][a] != x[i][b]) return x[i][a] < x[i][b]; return false; } int main() { int n; cin >> n >> m; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> x[j][i]; long long answer = INFLL; for (int i = 1; i <= m; i++) GetDimmension(x[i], n, i); for (int i = 1; i <= n; i++) { long long sum = 0; for (int j = 1; j <= m; j++) sum += add[j][i]; if (sum < answer) { answer = sum; solution.clear(); solution.push_back(i); } else if (sum == answer) solution.push_back(i); } sort(solution.begin(), solution.end(), Compare); cout << answer << "\n" << solution.size() << "\n"; for (auto &it : solution) { for (int i = 1; i <= m; i++) cout << x[i][it] << " "; cout << "\n"; } return 0; }