#include <iostream> #include <vector> #include <unordered_map> #define M_MAX 50010 #define ULL unsigned long long #define MAX_ULL -1 #include <algorithm> using namespace std; int m,n; unsigned long long sum; int el; vector<int> friends[M_MAX]; vector<int> poz; vector<int> poz2; int f(vector<int> a,vector<int> b){ int nr1 = 0; int nr2 = 0; for(int i=0;i<a.size();i++){ nr1 += a[i]; nr2 += b[i]; } return nr1 < nr2; } int abs(int a){ if(a < 0) return -a; return a; } int computeDist(vector<int> a,vector<int> b){ int nr = 0; for(int i=0;i<a.size();i++){ nr += abs(a[i] - b[i]); } return nr; } int f2(int i,int j){ for(int p=0;p<n;p++){ if(friends[i][p] != friends[j][p]) return friends[i][p] < friends[j][p]; } return 0; } void compute(){ vector<int> mid = friends[m/2]; vector<int> mid2 = friends[m/2-1]; ULL total = 0; ULL total2 = 0; ULL minim2 = MAX_ULL; ULL minim = MAX_ULL; ULL curent; ULL curent2; for(int i=0;i<m;i++){ curent = computeDist(mid,friends[i]); if(curent < minim && i!= m/2){ minim = curent; poz.clear(); poz.push_back(i); } else if(curent == minim) poz.push_back(i); total += curent; } if(n % 2 == 0){ for(int i=0;i<m;i++){ curent2 = computeDist(mid2,friends[i]); if(curent2 < minim2 && i!= m/2-1){ minim2 = curent2; poz2.clear(); poz2.push_back(i); } else if(curent2 == minim2) poz2.push_back(i); total2 += curent2; } } if(total < total2) { if(poz.size() == 1 || computeDist(mid,friends[poz[0]]) == computeDist(friends[poz[0]],friends[poz[1]])) poz.push_back(m/2); cout << total << '\n'; cout << poz.size() << '\n'; sort(poz.begin(),poz.end(),f2); for(int i=0;i<poz.size();i++){ for(int j=0;j<n;j++){ cout << friends[i][j] << ' '; } cout << '\n'; } } else{ if(poz2.size() == 1 || computeDist(mid2,friends[poz[0]]) == computeDist(friends[poz[0]],friends[poz[1]])) poz2.push_back(m/2); cout << total2 << '\n'; cout << poz2.size() << '\n'; sort(poz2.begin(),poz2.end(),f2); for(int i=0;i<poz2.size();i++){ for(int j=0;j<n;j++){ cout << friends[i][j] << ' '; } cout << '\n'; } } } int main() { cin >> m >> n; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ cin >> el; friends[i].push_back(el); } } sort(friends,friends+m,f); compute(); return 0; }