#include <bits/stdc++.h>
using namespace std;
const int N = 2e3;
bool possible, check[N << 2], mark[N << 2];
vector<int> topol, from[N << 2], to[N << 2];
int n, m, c, d[N], com[N << 2], row[N], col[N], a[N][N], b[N][N];
void dfs_scc(int u, int c) {
  com[u] = c;
  mark[u] = true;
  for (auto v : to[u])
    if (!mark[v]) dfs_scc(v, c);
}
void strongly_connected_components() {
  memset(mark, false, sizeof mark);
  for (int i = 0; i < n << 2; i++)
    if (check[i] && !mark[i]) dfs_scc(i, ++c);
}
void dfs_topolo(int u) {
  mark[u] = true;
  for (auto v : from[u])
    if (!mark[v]) dfs_topolo(v);
  topol.push_back(u);
}
void topological_sort() {
  for (int i = 0; i < n << 2; i++)
    if (check[i] && !mark[i]) dfs_topolo(i);
  reverse(topol.begin(), topol.end());
}
void input(int w) {
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    for (int j = 0; j < n; j++) (w ? a[i][j] : b[i][j]) = s[j] - '0';
  }
}
void add_edge(int u, int v) {
  check[u] = check[v] = true;
  from[u].push_back(v);
  from[v].push_back(u);
  to[u].push_back(v);
  to[v].push_back(u);
}
void add_clause(int u, int v) {
  add_edge(u ^ 1, v);
  add_edge(u, v ^ 1);
}
void F2(int u, int v) {
  int k = a[u][v] + b[u][v];
  if (k == 1) (d[v] & 1 ? row[u] : col[v]) = 1;
}
void F1(int u, int v, int k) {
  k += a[u][v] + b[u][v];
  if (k == 3) {
    add_clause(u << 1, (v + n) << 1);
    return;
  }
  if (k == 1) {
    cout << -1;
    exit(0);
  }
  if (k == 4 || (!a[u][v] && k == 2)) {
    add_clause(u << 1 ^ 1, (v + n) << 1);
    return;
  }
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n;
  input(1), input(0);
  string s;
  cin >> s;
  for (int i = 0; i < n; i++) d[i] = s[i] - '0';
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) d[i] == d[j] ? F1(i, j, d[i] + d[j]) : F2(i, j);
  topological_sort();
  strongly_connected_components();
  for (int i = 0; i < n << 1; i++)
    if (check[i << 1] && com[i << 1] == com[i << 1 ^ 1]) {
      cout << -1;
      return 0;
    } else if (check[i << 1] && com[i << 1] < com[i << 1 ^ 1])
      i >= n ? col[i - n] = 1 : row[i] = true;
  int cnt = 0;
  for (int i = 0; i < n; i++) cnt += row[i] + col[i];
  cout << cnt << endl;
  for (int i = 0; i < n; i++)
    if (row[i]) cout << "row " << i << endl;
  for (int i = 0; i < n; i++)
    if (col[i]) cout << "col " << i << endl;
}
