#include #include #include #include #include using namespace std; struct Pisica { int v[25]; long double dm; } v[50000]; struct PisicaD { long double dm; int id; } pd[50000]; bool cmp(const PisicaD& a, const PisicaD& b) { return a.dm < b.dm; } long double dmin; vector sol; long double pc[25]; int n, m; bool cmp2(const int& a, const int& b) { for(int i = 0; i < n; i++) if(v[a].v[i] < v[b].v[i]) return true; else if(v[a].v[i] > v[b].v[i]) return false; return true; } long double distMij(int i) { long double rez = 0; for(int j = 0; j < n; j++) rez += abs(pc[j] - v[i].v[j]); return rez; } long long dist(int i, int j) { long long rez = 0; for(int k = 0; k < n; k++) rez += abs(v[i].v[k] - v[j].v[k]); return rez; } long long distAll(int i) { long long rez = 0; for(int k = 0; k < m; k++) rez += dist(i, k); return rez; } void calcMij() { for(int j = 0; j < n; j++) { long long aux = 0; for(int i = 0; i < m; i++) aux += v[i].v[j]; pc[j] = aux / (long double)m; } } void solve() { for(int i = 0; i < m; i++) { pd[i].id = i; pd[i].dm = distMij(i); } sort(pd, pd + m, cmp); dmin = pd[0].dm; long long di = 0x3f3f3f3f3f3f3f3f; for(int i = 0; i < m && pd[i].dm - pd[0].dm <= 3; i++) { long long dc = distAll(pd[i].id); if(dc < di) { sol.clear(); di = dc; sol.push_back(pd[i].id); } else if(dc == di) sol.push_back(pd[i].id); } sort(sol.begin(), sol.end(), cmp2); int lg = sol.size(); printf("%lld\n", di); printf("%d\n", lg); for(int i = 0; i < sol.size(); i++) { for(int j = 0; j < n; j++) { printf("%d ", v[sol[i]].v[j]); } printf("\n"); } } int main() { freopen("exp.in", "r", stdin); scanf("%d%d", &m, &n); for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) scanf("%d", &v[i].v[j]); calcMij(); solve(); return 0; }