#include <bits/stdc++.h>   using namespace std;   void solve() {     long long n;     cin >> n;     bool a[n][n], fin[n][n], line[n];     for (long long i = (0); i < (n); i++) {       string s;       cin >> s;       for (long long j = (0); j < (n); j++) a[i][j] = s[j] ==  0  ? 0 : 1;     }     for (long long i = (0); i < (n); i++) {       string s;       cin >> s;       for (long long j = (0); j < (n); j++) fin[i][j] = s[j] ==  0  ? 0 : 1;     }     string s;     cin >> s;     for (long long i = (0); i < (n); i++) line[i] = s[i] ==  0  ? 0 : 1;     bool flag = 1;     for (long long i = (0); i < (n); i++) {       for (long long j = (0); j < (n); j++) {         if (a[i][j] != fin[i][j]) {           flag = 0;           break;         }       }     }     if (flag) {       cout << 0;       return;     }     bool row[n], col[n];     memset(row, 0, sizeof(row));     memset(col, 0, sizeof(col));     long long f = -1;     for (long long i = (0); i < (n); i++) {       if (line[i]) {         f = i;         break;       }     }     if (f == -1) {       cout << -1;       return;     }     for (long long i = (0); i < (n); i++) {       if (a[i][f] != fin[i][f]) row[i] = 1;     }     bool temp[n][n];     for (long long i = (0); i < (n); i++) {       for (long long j = (0); j < (n); j++) {         temp[i][j] = a[i][j];         if (row[i]) temp[i][j] ^= line[j];       }     }     for (long long j = (0); j < (n); j++) {       flag = 1;       for (long long i = (0); i < (n); i++) {         if (temp[i][j] != fin[i][j]) {           flag = 0;           break;         }       }       if (flag) continue;       flag = 1;       col[j] = 1;       for (long long i = (0); i < (n); i++) temp[i][j] ^= line[i];       for (long long i = (0); i < (n); i++) {         if (temp[i][j] != fin[i][j]) {           flag = 0;           break;         }       }       if (!flag) break;     }     if (flag) {       long long cnt = 0;       for (long long i = (0); i < (n); i++) {         cnt += row[i];         cnt += col[i];       }       cout << cnt <<   n ;       for (long long i = (0); i < (n); i++) {         if (row[i]) cout <<  row   << i <<   n ;       }       for (long long i = (0); i < (n); i++) {         if (col[i]) cout <<  col   << i <<   n ;       }       return;     }     for (long long i = (0); i < (n); i++) {       if (line[i]) row[i] ^= 1;     }     for (long long i = (0); i < (n); i++) {       for (long long j = (0); j < (n); j++) {         temp[i][j] = a[i][j];         if (row[i]) temp[i][j] ^= line[j];       }     }     for (long long j = (0); j < (n); j++) {       col[j] = 0;       flag = 1;       for (long long i = (0); i < (n); i++) {         if (temp[i][j] != fin[i][j]) {           flag = 0;           break;         }       }       if (flag) continue;       flag = 1;       col[j] = 1;       for (long long i = (0); i < (n); i++) temp[i][j] ^= line[i];       for (long long i = (0); i < (n); i++) {         if (temp[i][j] != fin[i][j]) {           flag = 0;           break;         }       }       if (!flag) break;     }     if (flag) {       long long cnt = 0;       for (long long i = (0); i < (n); i++) {         cnt += row[i];         cnt += col[i];       }       cout << cnt <<   n ;       for (long long i = (0); i < (n); i++) {         if (row[i]) cout <<  row   << i <<   n ;       }       for (long long i = (0); i < (n); i++) {         if (col[i]) cout <<  col   << i <<   n ;       }       return;     }     cout << -1;   }   signed main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     long long t = 1;     for (long long i = (1); i < (t + 1); i++) {       solve();       cout <<   n ;     }   }