#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[210][210], c[210][210], pre[210][210];
int hang[210], lie[210];
inline bool solve(int x, int y) {
  for (int i = 1; i <= x - 1; i++)
    for (int j = 1; j <= m; j++) c[i][j] = 0;
  for (int j = 1; j < y; j++) c[x][j] = 0;
  for (int j = y; j <= m; j++) c[x][j] = 1;
  for (int i = x + 1; i <= n; i++)
    for (int j = 1; j <= m; j++) c[i][j] = 1;
  for (int i = 1; i <= n; i++) {
    hang[i] = a[i][1] ^ c[i][1];
    for (int j = 1; j <= m; j++) {
      a[i][j] ^= hang[i];
      if (lie[j] != -1) {
        a[i][j] ^= lie[j];
        if (c[i][j] != a[i][j]) return false;
      } else
        lie[j] = a[i][j] ^ c[i][j];
    }
  }
  return true;
}
inline void print() {
  printf("YES\n");
  for (int i = 1; i <= n; i++) printf("%d", hang[i]);
  puts("");
  for (int i = 1; i <= m; i++) printf("%d", lie[i]);
  exit(0);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) scanf("%d", &pre[i][j]);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      memset(hang, -1, sizeof(hang));
      memset(lie, -1, sizeof(lie));
      memcpy(a, pre, sizeof(pre));
      if (solve(i, j) == true) print();
    }
  printf("NO\n");
  return 0;
}
