#include #include #include using namespace std; const int nmax = 5e4; const int mmax = 25; int n, m; vector< int > v[nmax + 1]; long long dist[nmax + 1]; vector< pair > col[mmax + 1]; vector< int > ans; bool cmp (int x, int y) { for (int i = 1; i <= m; ++ i) { if (v[ x ][ i ] != v[ y ][ i ]) { return (v[ x ][ i ] < v[ y ][ i ]); } } return 0; } int main() { cin >> n >> m; for (int i = 1; i <= n; ++ i) { v[ i ].resize(m + 1); for (int j = 1; j <= m; ++ j) { cin >> v[ i ][ j ]; col[ j ].push_back(make_pair(v[ i ][ j ], i)); } } for (int i = 1; i <= m; ++ i) { sort(col[ i ].begin(), col[ i ].end()); long long d = 0; for (int j = 0; j < (int)col[ i ].size(); ++ j) { d += col[ i ][ j ].first; dist[ col[ i ][ j ].second ] += 1LL * col[ i ][ j ].first * (j + 1) - d; } int cate = 0; d = 0; for (int j = (int)col[ i ].size() - 1; j >= 0; -- j) { d += col[ i ][ j ].first; ++ cate; dist[ col[ i ][ j ].second ] += d - 1LL * cate * col[ i ][ j ].first; } } long long mn = (1LL << 62); for (int i = 1; i <= n; ++ i) { mn = min(mn, dist[ i ]); } for (int i = 1; i <= n; ++ i) { if (dist[ i ] == mn) { ans.push_back( i ); } } sort(ans.begin(), ans.end(), cmp); cout << mn << "\n" << ans.size() << "\n"; for (auto i : ans) { for (int j = 1; j <= m; ++ j) { cout << v[ i ][ j ] << " "; } cout << "\n"; } return 0; }