#include <bits/stdc++.h>
using namespace std;
template <typename U, typename V>
void Min(U &a, const V &b) {
  if (a > b) a = b;
}
template <typename U, typename V>
void Max(U &a, const V &b) {
  if (a < b) a = b;
}
template <typename U, typename V>
void add(U &a, const V &b) {
  a = (a + b) % 1000000007;
}
template <typename U>
U gcd(U a, U b) {
  if (a == 0) return b;
  if (b == 0) return a;
  if (a >= b)
    return gcd(a - b, b);
  else
    return gcd(a, b - a);
}
int pow(int a, int b) {
  int ans = 1;
  while (b) {
    if (b & 1) ans = 1LL * ans * a % 1000000007;
    a = 1LL * a * a % 1000000007;
    b >>= 1;
  }
  return ans;
}
char s[2005];
int a[2005][2005], b[2005][2005];
int c[2005 << 2], be[2005 << 2], p, is[2005 << 2], vis[2005 << 2];
vector<int> g[2005 << 2];
void add(int a, int b) {
  g[a].push_back(b);
  g[b].push_back(a);
}
void go(int u) {
  be[u] = p;
  for (auto &v : g[u]) {
    if (!be[v]) go(v);
  }
}
void dfs(int u) {
  is[u] = 1;
  vis[u] = 1;
  for (auto &v : g[u]) {
    if (!is[v]) dfs(v);
  }
}
int main() {
  int T, m, n, i, j, k, K;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%s", s);
    for (int j = 0; j < n; j++) a[i][j] = s[j] - '0';
  }
  for (int i = 0; i < n; i++) {
    scanf("%s", s);
    for (int j = 0; j < n; j++) b[i][j] = s[j] - '0';
  }
  scanf("%s", s);
  for (int i = 0; i < n; i++) c[i] = s[i] - '0';
  m = 2 * n;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (a[i][j] != b[i][j]) {
        if (c[i] || c[j]) {
          if (c[i] && c[j]) {
            add(i * 2, j * 2 + 1 + m);
            add(i * 2 + 1, j * 2 + m);
          } else if (c[i])
            vis[j * 2 + m] = 1;
          else
            vis[i * 2] = 1;
        } else {
          puts("-1");
          return 0;
        }
      } else {
        if (c[i] || c[j]) {
          if (c[i] && c[j]) {
            add(i * 2, j * 2 + m);
            add(i * 2 + 1, j * 2 + 1 + m);
          } else if (c[i])
            vis[j * 2 + 1 + m] = 1;
          else if (c[j])
            vis[i * 2 + 1] = 1;
        }
      }
    }
  }
  for (int i = 0; i < 4 * n; i++)
    if (!be[i]) {
      p++;
      go(i);
    }
  for (int i = 0; i < n * 2; i++)
    if (be[i * 2] == be[i * 2 + 1]) {
      puts("-1");
      return 0;
    }
  for (int i = 0; i < n * 4; i++)
    if (vis[i] == 1 && !is[i]) {
      dfs(i);
    }
  for (int i = 0; i < n * 2; i++)
    if (vis[i * 2] && vis[i * 2 + 1]) {
      puts("-1");
      return 0;
    }
  for (int i = 0; i < n * 2; i++) {
    if (vis[i * 2 + 1] == 0 && !is[i * 2]) {
      dfs(i * 2);
    }
  }
  int ans = 0;
  for (int i = 0; i < n * 2; i++)
    if (vis[i * 2]) ans++;
  printf("%d\n", ans);
  for (int i = 0; i < n; i++)
    if (vis[i * 2]) printf("row %d\n", i);
  for (int i = 0; i < n; i++)
    if (vis[i * 2 + m]) printf("col %d\n", i);
}
