#include <bits/stdc++.h>
const int N = 205;
int n, m, A[N][N], a[N][N], h[N], l[N];
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 = 0; i <= m; i++) {
    int f = 1;
    memcpy(a, A, sizeof(A));
    memset(h, 0, sizeof(h));
    memset(l, 0, sizeof(l));
    for (int j = 1; j <= m; j++)
      if ((j <= i && a[1][j]) || (j > i && a[1][j] == 0)) {
        for (int k = 1; k <= n; k++) a[k][j] ^= 1;
        l[j] ^= 1;
      }
    for (int j = 2; j <= n; j++) {
      int f0 = 1, f1 = 1;
      for (int k = 1; k <= m; k++)
        if (a[j][k])
          f0 = 0;
        else
          f1 = 0;
      if (f0)
        h[j] ^= 1;
      else if (!f1) {
        f = 0;
        break;
      }
    }
    if (f) {
      puts("YES");
      for (int j = 1; j <= n; j++) printf("%d", h[j]);
      puts("");
      for (int j = 1; j <= m; j++) printf("%d", l[j]);
      puts("");
      return 0;
    }
  }
  memcpy(a, A, sizeof(A));
  memset(h, 0, sizeof(h));
  memset(l, 0, sizeof(l));
  for (int i = 1; i <= m; i++)
    if (a[1][i]) {
      for (int k = 1; k <= n; k++) a[k][i] ^= 1;
      l[i] ^= 1;
    }
  int f = 2;
  for (int j = 2; j <= n; j++) {
    int cnt = 0, c = a[j][1];
    for (int k = 2; k <= m; k++)
      if (a[j][k] != a[j][k - 1]) cnt++;
    if (cnt > 1) {
      puts("NO");
      return 0;
    }
    if (cnt == 0 && f == 2) {
      if (c == 1) h[j] ^= 1;
      continue;
    }
    if (cnt == 0 && f == 1) {
      if (c == 0) h[j] ^= 1;
      continue;
    }
    if (cnt == 1 && f == 2) {
      f--;
      if (c) h[j] ^= 1;
      continue;
    }
    puts("NO");
  }
  puts("YES");
  for (int j = 1; j <= n; j++) printf("%d", h[j]);
  puts("");
  for (int j = 1; j <= m; j++) printf("%d", l[j]);
  puts("");
  return 0;
}
