/*
TASK: EXPRES
AUTHOR: SRAM GO E DA KAJE
LANG: C++
*/

#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;

#define MAXN 64
#define MAXK 64

#define ABS(a) ((a)>0?(a):-(a))

int a[MAXN];
int N, K;
char d[8][3*MAXN*MAXN];
char c[10][6][5] ={
{//nula
"111",
"101",
"101",
"101",
"111",},
{//edno
"001",
"001",
"001",
"001",
"001",},
{//dve
"111",
"001",
"111",
"100",
"111",},
{//tri
"111",
"001",
"111",
"001",
"111"},
{//chetiri
"101",
"101",
"111",
"001",
"001"},
{//pet
"111",
"100",
"111",
"001",
"111",},
{//6est
"111",
"100",
"111",
"101",
"111"},
{//sedem
"111",
"001",
"001",
"001",
"001",},
{//osem
"111",
"101",
"111",
"101",
"111"},
{//devet
"111",
"101",
"111",
"001",
"111"}
};
char zn[2][10][10] = {
{//plus
"000",
"010",
"111",
"010",
"000"},
{//minus
"000",
"000",
"111",
"000",
"000"}
};

char sd[6][1000];
int ans1[MAXN];
int moves[10][10];
int dp[MAXN][MAXK][2*MAXK];
typedef struct path {
    int c;
    int f;
}path;
int best = -1;

path ans[MAXN][MAXK][2*MAXK];

void print_answer(void) {
    int sum = 0;
    for(int i = 0; i < N; i++)
        sum += ans1[i];

    printf("%d\n", sum);

    for(int i = 0; i < 5; i++) {
        for(int j = 0; j < N; j++) {
            if (ans1[j] <0 && j != 0)
                printf("%s", zn[1][i]);
            else if(j != 0)
                printf("%s", zn[0][i]);
                
            printf("%s",c[ABS(ans1[j])][i]);
        }
        printf("\n");
    }
    return;
}

int det(void) {
    int mn = 1;
    if(sd[2][1] == '1')
        mn = -1;
    for(int i = 0; i < 5; i++)
        strcpy(sd[i], sd[i]+3);

    int i, j;
    for(i = 0; i <= 9; i++) {
        for(j = 0; j < 5; j++)
            if(strcmp(c[i][j], sd[j]))
                break;
        if(j == 5)
            return mn*i;
    }
    

}

void read_input(void) {


    scanf("%d%d\n", &N, &K);
    for(int i = 0; i < 5; i++)
        scanf("%s\n", sd[i]);

    for(int i = 0; i < 5; i++) {
        strcpy(d[i], "000");
        strcat(d[i], sd[i]);
    }

    int br = 1;
    while(strlen(d[0])!=0) {
        for(int i = 0; i < 5; i++) {
            strcpy(sd[i], d[i]);
            sd[i][6] = '\0';
            strcpy(d[i], d[i]+6);
        }
        a[br++] = det();
    }


    return;
}

int fan(int j, int st) {

    if(j == 0)
        return st;

    if(st == 5) {
        if(j==1)
            return 9;
        else
            return -1000;
    }
    if(st == 7) {
        if(j == 3)
            return 9;
    }

    if(st == -7) {
        if(j == 2)
            return 7;
        if(j == -2)
            return -1;
    }
    return st;

}

int solve(int i, int k, int balance, int sum) {

    if(i == N)
        if(balance != 0)
            return 0;
        else {
            best = sum;
            return 1;
        }
}

int main() {

    freopen("expres.in", "rt", stdin);
    freopen("expres.out", "wt", stdout);

    read_input();

    int i, j, k, m;
 //   solve(1, 0, 0);

/*    for(i = 1; i <= N; i++) {
        for(k = 1; k <= K; k++) {
            for(j = MAXK-k; j <= MAXK+k; j++) {
               dp[i][k][j] = dp[i-1][k][k-j-MAXK+k] + fan(j-MAXK, a[i]);
                 if(dp[i][k][j] <= dp[i-1][k][j] + a[i]) {
                    dp[i][j][j] = dp[i-1][k][j];
                    ans[i][k][j].c = fan(j-MAXK, a[i]);
                    ans[i][k][j].f = k*100 + j;
                 }
                 else {
                    ans[i][k][j].c = fan(j-MAXK, a[i]);
                    ans[i][k][j].f = k*100 + (k-j-MAXK+k);
                 }
            }
        }
    }
*/
    int balance = 0;
    int brm = 0;
    for(int i = 1; i <= N; i++)
        if(a[i] < 0)
            brm ++;

    if(brm < N/2 )
        for(int i = 1; i <= N; i++)
            ans1[i-1] = ABS(a[i]);

    for(int i = 0; i < N ; i++)
        if(ans1[i] == 7) {
            brm--;
            ans1[i] = 1;
        }
       // else if(ans1[i] ==

    ans1[0] = 5; ans1[1] = 7; ans1[2] = -1;
    print_answer();

    fclose(stdin);
    fclose(stdout);

    return 0;
}



    
