#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 105;
int mar[N][N][2], g[N][N], n, m;
int rows[N][2], columns[N][2];
int ans[2];
void init() {
  memset(ans, 0, sizeof(ans));
  memset(mar, 0, sizeof(mar));
  memset(rows, 0, sizeof(rows));
  memset(columns, 0, sizeof(columns));
  memset(g, 0, sizeof(g));
}
void row_do(int x, int kind) {
  int min_g = g[x][0];
  int min_m = mar[x][0][kind];
  for (int i = 1; i < m; i++) {
    min_g = min(min_g, g[x][i]);
    min_m = min(min_m, mar[x][i][kind]);
  }
  rows[x][kind] = (min_g - min_m) > 0 ? (min_g - min_m) : 0;
  if (rows[x] == 0) return;
  ans[kind] += rows[x][kind];
  for (int i = 0; i < m; i++) mar[x][i][kind] += rows[x][kind];
}
void column_do(int y, int kind) {
  int min_g = g[0][y];
  int min_m = mar[0][y][kind];
  for (int i = 0; i < n; i++) {
    min_g = min(min_g, g[i][y]);
    min_m = min(min_m, mar[i][y][kind]);
  }
  columns[y][kind] = (min_g - min_m) > 0 ? (min_g - min_m) : 0;
  if (columns[y] == 0) return;
  ans[kind] += columns[y][kind];
  for (int i = 0; i < n; i++) mar[i][y][kind] += columns[y][kind];
}
void solve() {
  for (int i = 0; i < n; i++) {
    row_do(i, 0);
  }
  for (int i = 0; i < m; i++) {
    column_do(i, 0);
  }
  for (int i = 0; i < m; i++) {
    column_do(i, 1);
  }
  for (int i = 0; i < n; i++) {
    row_do(i, 1);
  }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (g[i][j] != mar[i][j][0]) {
        puts("-1");
        return;
      }
  int kind = ans[0] < ans[1] ? 0 : 1;
  printf("%d\n", ans[kind]);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < rows[i][kind]; j++) printf("row %d\n", i + 1);
  for (int i = 0; i < m; i++)
    for (int j = 0; j < columns[i][kind]; j++) printf("col %d\n", i + 1);
}
int main() {
  while (~scanf("%d%d", &n, &m)) {
    init();
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        scanf("%d", &g[i][j]);
      }
    }
    solve();
  }
  return 0;
}
