#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<iostream>

using namespace std;

#define x first
#define y second
#define MOD 666013
#define NMAX 50005

int n,m, mat[NMAX][30], ord[NMAX], v[NMAX], cnt;
pair<int,int> interv[NMAX];
long long answer;

int cmp(const int& a, const int& b){
    for(int i = 1; i <= m; i++)
        if(mat[a][i] != mat[b][i])
            return mat[a][i] < mat[b][i];
    return a < b;
}

int condition(int index){
    for(int i = 1; i <= m; i++)
        if(!(interv[i].x <= mat[index][i] && mat[index][i] <= interv[i].y))
            return 0;
    return 1;
}

int main (){

    scanf("%d%d",&n,&m);
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            scanf("%d",&mat[i][j]);
    for(int i = 1; i <= m; i++){
        for(int j = 1; j <= n; j++)
            v[j] = mat[j][i];
        sort(v + 1, v + n + 1);
        if(n & 1)
            interv[i] = make_pair(v[n / 2 + 1], v[n / 2 + 1]);
        else
            interv[i] = make_pair(v[n / 2], v[n / 2 + 1]);
        for(int j = 1; j <= n; j++)
            answer += (j <= n / 2 + 1 ? interv[i].y - v[j] : v[j] - interv[i].y);
    }
    
    for(int i = 1; i <= n; i++)
        ord[i] = i;
    sort(ord + 1, ord + n + 1,cmp);
    for(int i = 1; i <= n; i++){
        if(condition(ord[i]))
            cnt++;
    }
    printf("%lld\n%d\n", answer, cnt);
    for(int i = 1; i <= n; i++){
        if(condition(ord[i])){
            for(int j = 1; j <= m; j++)
                printf("%d ", mat[ord[i]][j]);
            printf("\n");
        }
    }
        
    return 0;
}