this question is about greedy. the first thing is those 0 in B means no 1 in such row and col EXEMPT!!! when one col/row come with all 1. we have to be care deal with it.
Source code as follows:
m, n = map(int, raw_input().split())
mem = []
for i in xrange(m):
temp = list(map(int, raw_input().split()))
mem.append(temp)
r = []
c = []
for i in xrange(m):
for j in xrange(n):
temp = mem[i][j]
if temp == 0:
if i not in r:
r.append(i)
if j not in c:
c.append(j)
b = [1] * n
a = []
for i in xrange(m):
a.append(b[:])
f = 1
for i in xrange(m):
if f == 0:
break
for j in xrange(n):
temp = mem[i][j]
if temp == 0:
for k in xrange(n):
a[i][k] = 0
for l in xrange(m):
a[l][j] = 0
elif (i in r) and (j in c):
f = 0
if len(r) == m or len(c) == n:
for i in xrange(m):
if 1 in mem[i]:
f = 0
p = ''
if f:
print 'YES'
for i in xrange(m):
for j in xrange(n):
p += str(a[i][j])
if len(p) == n:
print ' '.join(p)
p = ''
else:
print 'NO'
if you wanna output a array like 1 2 3 4. add it to an empty string and using ' '.join(p)