#include using namespace std; typedef long long I64; const I64 NMAX = 50000; const I64 KMAX = 25; I64 v[NMAX+2]; I64 loc[NMAX+2][2], fx[KMAX+2]; I64 hs[NMAX+2][KMAX+1]; bool good[NMAX+2]; I64 N, K; int main() { cin >> N >> K; for( I64 i = 1; i <= N; ++i ) { for( I64 j = 1; j <= K; ++j ) { cin >> hs[i][j]; } } for( I64 j = 1; j <= K; ++j ) { for( I64 i = 1; i <= N; ++i ) v[i] = hs[i][j]; sort( v+1, v+N+1 ); if( N % 2 == 1 ) { fx[j] = 1; loc[j][0] = v[ N/2 ]; } else { I64 x = v[ N/2 ]; I64 y = v[ N/2 + 1 ]; if( x == y ) { fx[j] = 1; loc[j][0] = x; } else { loc[j][0] = x; loc[j][1] = y; } } } I64 Cost = 0; for( I64 i = 1; i <= N; ++i ) { for( I64 j = 1; j <= K; ++j ) { /// if( fx[j] ) { Cost += max( hs[i][j] - loc[j][0], loc[j][0]-hs[i][j] ); /// } /// else { /// I64 c1 = max( hs[i][j] - loc[j][0], loc[j][0]-hs[i][j] ); /// I64 c2 = max( hs[i][j] - loc[j][1], loc[j][1]-hs[i][j] ); /// Cost += min( c1, c2 ); /// } } } cout << Cost << '\n'; vector < vector > sol; for( I64 i = 1; i <= N; ++i ) { good[i] = 1; vector line; for( I64 j = 1; j <= K; ++j ) { if( fx[j] ) { if( hs[i][j] != loc[j][0] ) good[i] = 0; } else { if( hs[i][j] != loc[j][0] && hs[i][j] != loc[j][1] ) good[i] = 0; } line.push_back( hs[i][j] ); } if( good[i] ) sol.push_back( line ); } cout << sol.size() << '\n'; for( auto line : sol ) { for( auto x : line ) { cout << x << ' '; } cout << '\n'; } return 0; }