#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 5;
int n;
char s[N][N], t[N][N], p[N];
inline int Not(int x) { return x + 2 * n; }
vector<int> G[N << 2], dag[N << 2];
inline void add(int x, int y) { G[x].push_back(y); }
int dfn[N << 2], num[N << 2], low[N << 2], id, tot, sta[N << 2], top;
bool in[N << 2], val[N << 2];
int deg[N << 2], rk[N << 2];
void tarjan(int u) {
  in[u] = 1;
  low[u] = dfn[u] = ++id;
  sta[++top] = u;
  for (int v : G[u]) {
    if (!dfn[v]) {
      tarjan(v);
      low[u] = min(low[u], low[v]);
    } else if (in[v])
      low[u] = min(low[u], dfn[v]);
  }
  if (low[u] == dfn[u]) {
    tot++;
    while (top) {
      int tmp = sta[top--];
      in[tmp] = 0;
      num[tmp] = tot;
      if (tmp == u) break;
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n;
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 0; i < n; i++) cin >> t[i];
  cin >> p;
  bool bad = false;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      if (s[i][j] == t[i][j]) {
        int x = p[i] - '0', y = p[j] - '0';
        if (x && y) {
          add(i, n + j);
          add(n + j, i);
          add(Not(i), Not(n + j));
          add(Not(n + j), Not(i));
        } else if (x || y) {
          if (y)
            add(i, Not(i));
          else
            add(n + j, Not(n + j));
        }
      } else {
        int x = p[i] - '0', y = p[j] - '0';
        if (x && y) {
          add(i, Not(n + j));
          add(n + j, Not(i));
          add(Not(i), n + j);
          add(Not(n + j), i);
        } else if (x || y) {
          if (y)
            add(Not(i), i);
          else
            add(Not(n + j), n + j);
        } else
          bad = true;
      }
    }
  for (int i = 0; i < 4 * n; i++)
    if (!dfn[i]) tarjan(i);
  for (int i = 0; i < 2 * n; i++)
    if (num[i] == num[Not(i)]) bad = true;
  if (bad)
    cout << -1 << '\n';
  else {
    queue<int> q;
    for (int i = 0; i < 4 * n; i++)
      for (int j : G[i])
        if (num[i] ^ num[j]) dag[num[i]].push_back(num[j]), deg[num[j]]++;
    for (int i = 1; i <= tot; i++)
      if (!deg[i]) q.push(i);
    while (q.size()) {
      int u = q.front();
      rk[u] = ++(*rk);
      q.pop();
      for (int v : dag[u])
        if (!(--deg[v])) q.push(v);
    }
    int cnt = 0;
    for (int i = 0; i < 2 * n; i++)
      if (num[i] < num[Not(i)]) val[i] = true, ++cnt;
    cout << cnt << '\n';
    for (int i = 0; i < n; i++)
      if (val[i]) cout << "row " << i << '\n';
    for (int i = 0; i < n; i++)
      if (val[n + i]) cout << "col " << i << '\n';
  }
  return 0;
}
