#include <bits/stdc++.h>
using namespace std;
const int maxn = 205;
int mat[maxn][maxn], tmp[maxn][maxn];
int r[maxn], c[maxn];
int n, m;
void invRow(int row) {
  for (int j = 1; j <= m; ++j) {
    tmp[row][j] ^= 1;
  }
}
void invCol(int col) {
  for (int i = 1; i <= n; ++i) {
    tmp[i][col] ^= 1;
  }
}
bool solve(int x, int y) {
  memset(tmp, 0, sizeof(tmp));
  memset(r, 0, sizeof(r));
  memset(c, 0, sizeof(c));
  for (int i = x; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      if (i == x && j < y)
        tmp[i][j] = 0;
      else
        tmp[i][j] = 1;
    }
  }
  for (int i = 1; i <= n; ++i) r[i] = mat[i][1] ^ tmp[i][1] ^ c[1];
  for (int j = 1; j <= m; ++j) c[j] = mat[1][j] ^ tmp[1][j] ^ r[1];
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      if ((r[i] ^ c[j]) != (mat[i][j] ^ tmp[i][j])) return false;
    }
  }
  return true;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      scanf("%d", &mat[i][j]);
    }
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      if (solve(i, j)) {
        puts("YES");
        for (int i = 1; i <= n; ++i) printf("%d", r[i]);
        putchar('\n');
        for (int j = 1; j <= m; ++j) printf("%d", c[j]);
        putchar('\n');
        return 0;
      }
    }
  }
  puts("NO");
  return 0;
}
