#include <bits/stdc++.h>   #pragma G++ optimize( Ofast,no-stack-protector )   #pragma G++ optimize( -O3,-O2,-O1 )   #pragma G++ target(         sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native )   #pragma G++ optimize( unroll-loops )   using namespace std;   long long binpow(long long a, long long n, long long mod) {     long long ans = 1;     while (n) {       if (n & 1) ans = (ans * a) % mod;       a = (a * a) % mod;       n >>= 1;     }     return ans;   }   long long binpow(long long a, long long n) {     long long ans = 1;     while (n) {       if (n & 1) ans *= a;       a *= a;       n >>= 1;     }     return ans;   }   vector<long long> pr;   void PrDoX(long long x) {     if (pr.size() > 0) return;     vector<long long> p(x + 1);     for (long long i = 2; i <= x; i++) {       if (p[i] == 0) {         pr.push_back(i);         for (long long j = i + i; j <= x; j += i) p[j] = 1;       }     }   }   vector<long long> fact(long long x) {     PrDoX(sqrt(1e9));     vector<long long> ans;     long long i = 0, c = sqrt(x), n = pr.size();     while (x > 1 and pr[i] <= c and i < n) {       if (x % pr[i] == 0) {         x /= pr[i];         ans.push_back(pr[i]);         c = sqrt(x);       } else         i++;     }     if (x != 1) ans.push_back(x);     return ans;   }   int dp[501][26][26], cost[501][26][26];   pair<int, int> ans[501][26][26];   int main() {     cin.tie(0);     cout.tie(0);     ios::sync_with_stdio(0);     for (int i = 1; i < 501; i++)       for (int j = 0; j < 26; j++)         for (int l = 0; l < 26; l++) dp[i][j][l] = 1e9;     int n, m;     cin >> n >> m;     vector<vector<int> > v(n, vector<int>(m));     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         char c;         cin >> c;         v[i][j] = c -  a ;       }     }     for (int i = 0; i < n; i++) {       for (int A = 0; A < 26; A++) {         for (int B = 0; B < 26; B++) {           if (A == B) continue;           for (int j = 0; j < m; j++)             cost[i][A][B] +=                 ((A != v[i][j]) * (j % 2 == 0) + (B != v[i][j]) * (j % 2 == 1));         }       }     }     for (int i = 0; i < 26; i++) {       for (int j = 0; j < 26; j++) dp[1][i][j] = cost[0][i][j];     }     for (int i = 1; i <= n; i++) {       for (int A = 0; A < 26; A++) {         for (int B = 0; B < 26; B++) {           if (A == B) continue;           for (int A2 = 0; A2 < 26; A2++) {             if (A2 == A) continue;             for (int B2 = 0; B2 < 26; B2++) {               if (B2 == B or A2 == B2) continue;               if (dp[i - 1][A2][B2] + cost[i - 1][A][B] < dp[i][A][B]) {                 dp[i][A][B] = dp[i - 1][A2][B2] + cost[i - 1][A][B];                 ans[i][A][B] = {A2, B2};               }             }           }         }       }     }     int mn = 1e9;     pair<int, int> x = {0, 0};     for (int i = 0; i < 26; i++) {       for (int j = 0; j < 26; j++) {         if (i != j and dp[n][i][j] < mn) mn = dp[n][i][j], x = {i, j};       }     }     cout << mn <<   n ;     vector<pair<int, int> > Ans;     for (int i = n; i > 0; i--) {       Ans.push_back(x);       x = ans[i][x.first][x.second];     }     for (int i = n - 1; i >= 0; i--) {       for (int j = 0; j < m; j++) {         if (j % 2 == 0)           cout << char(Ans[i].first +  a );         else           cout << char(Ans[i].second +  a );       }       cout <<   n ;     }     return 0;   }