#include #include #include #define NMAX 50005 #define inf 1e17 using namespace std; int i, n, m, j, cnt = 0 ; long long s[30], cat[30], ans = 0, posmin, minim = inf; struct extr { long long d[30], sum; }v[NMAX], sol[NMAX]; bool comp(extr a, extr b) { for (i = 1; i <= m; ++ i) if (a.d[i] < b.d[i]) return 1; return 0; } bool comp2(extr a, extr b) { return a.sum < b.sum; } int main() { cin >> n >> m; for (j = 1; j <= m; ++ j) { int sum1 = 0; for (i = 1; i <= n; ++ i) cin >> v[j].d[i], s[i] += v[j].d[i], sum1 += v[j].d[i]; v[j].sum = sum1; } for (i = 1; i <= n; ++ i) cat[i] = s[i] / m; sort(v + 1, v + m + 1, comp2); for (i = 1; i <= m; ++ i) { long long suma = 0; for (j = 1; j <= n; ++ j) suma += abs(v[i].d[j] - cat[j]); // v[i].sum = suma1; if (abs(suma) <= minim) { minim = abs(suma); posmin = i; } } // cout << posmin << " "; for (i = 1; i <= m; ++ i) { if (i != posmin) for (j = 1; j <= n; ++ j) ans += abs(v[posmin].d[j] - v[i].d[j]); } cout << ans << '\n'; if (n == 2) { sort(v + 1, v + 2, comp); for (i = 1; i <= 2; ++ i){ for (j = 1; j <= n; ++ j) cout << v[i].d[j] << " "; cout << '\n';} return 0; } for (i = 2; i <= m - 1; ++ i) { long long d1 = 0, d2 = 0, d3 = 0; for (j = 1; j <= n; ++ j) d1 += abs(v[i].d[j] - v[i - 1].d[j]), d2 += abs(v[i].d[j] - v[i + 1].d[j]), d3 += abs(v[i].d[j] - v[posmin].d[j]); if (d3 == d1 || d3 == d2) sol[++ cnt] = v[i]; } sort(sol + 1, sol + cnt + 1, comp); cout << cnt << '\n'; for (i = 1; i <= cnt; ++ i) { for (j = 1; j <= n; ++ j) cout << sol[i].d[j] << " "; cout << '\n'; } return 0; }