#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  return x * f;
}
const double eps = 1e-9;
const int maxn = 210;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
int N, M, K;
int a[maxn][maxn];
int cul[maxn], row[maxn];
bool check() {
  int p = 0;
  for (int i = 1; i <= N; i++) {
    int x = cul[1] ^ a[i][1];
    for (int j = 2; j <= M; j++) {
      if ((cul[j] ^ a[i][j]) != x) {
        if (p != i && p) return false;
        p = i;
      }
    }
  }
  if (p) {
    if ((cul[1] ^ a[p][1]) == 1)
      row[p] = 1;
    else
      row[p] = 0;
    int flag = 0;
    for (int i = 1; i <= M; i++) {
      int x = cul[i] ^ a[p][i];
      if (x == 1) {
        flag = 1;
      } else if (x == 0) {
        if (flag) return false;
      }
    }
  }
  for (int i = 1; i < p; i++) {
    if ((cul[1] ^ a[i][1]) == 1)
      row[i] = 1;
    else
      row[i] = 0;
  }
  for (int i = p + 1; i <= N; i++) {
    if ((cul[1] ^ a[i][1]) == 1)
      row[i] = 0;
    else
      row[i] = 1;
  }
  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", &a[i][j]);
    }
  }
  for (int i = 1; i <= M + 1; i++) {
    for (int j = 1; j < i; j++) {
      if (a[1][j] == 1)
        cul[j] = 1;
      else
        cul[j] = 0;
    }
    for (int j = i; j <= M; j++) {
      if (a[1][j] == 1)
        cul[j] = 0;
      else
        cul[j] = 1;
    }
    int flag = 0;
    if (check()) flag = 1;
    if (flag) {
      puts("YES");
      for (int i = 1; i <= N; i++) printf("%d", row[i]);
      puts("");
      for (int i = 1; i <= M; i++) printf("%d", cul[i]);
      return 0;
    }
  }
  puts("NO");
  return 0;
}
