Problem: Let's define logical OR as an operation on two logical values (i. e. values that belong to the set {0, 1}) that is equal to 1 if either or both of the logical values is set to 1, otherwise it is 0. We can define logical OR of three or more logical values in the same manner:

<image> where <image> is equal to 1 if some ai = 1, otherwise it is equal to 0.

Nam has a matrix A consisting of m rows and n columns. The rows are numbered from 1 to m, columns are numbered from 1 to n. Element at row i (1 ≤ i ≤ m) and column j (1 ≤ j ≤ n) is denoted as Aij. All elements of A are either 0 or 1. From matrix A, Nam creates another matrix B of the same size using formula:

<image>.

(Bij is OR of all elements in row i and column j of matrix A)

Nam gives you matrix B and challenges you to guess matrix A. Although Nam is smart, he could probably make a mistake while calculating matrix B, since size of A can be large.

Input

The first line contains two integer m and n (1 ≤ m, n ≤ 100), number of rows and number of columns of matrices respectively.

The next m lines each contain n integers separated by spaces describing rows of matrix B (each element of B is either 0 or 1).

Output

In the first line, print "NO" if Nam has made a mistake when calculating B, otherwise print "YES". If the first line is "YES", then also print m rows consisting of n integers representing matrix A that can produce given matrix B. If there are several solutions print any one.

Examples

Input

2 2
1 0
0 0


Output

NO


Input

2 3
1 1 1
1 1 1


Output

YES
1 1 1
1 1 1


Input

2 3
0 1 0
1 1 1


Output

YES
0 0 0
0 1 0

Solution (in JAVA):

Solution:
import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
public class Ideone
{
	public static void assign(int i,int j,int a[][],int n,int m){
		
	for(int ii=0;ii<n;ii++){
		a[ii][j]=-1;
	}
		for(int ii=0;ii<m;ii++){
		a[i][ii]=-1;
	}
	
		
		
		return;
	}
	
	public static boolean allr(int i,int j,int b[][],int n,int m){
	//	boolean flag=true;
		for(int ii=0;ii<n;ii++){
			if(b[ii][j]!=1){
				return false;
			}
		}
		
		return true;
	}
		public static boolean allc(int i,int j,int b[][],int n,int m){
	//	boolean flag=true;
		for(int ii=0;ii<m;ii++){
			if(b[i][ii]!=1){
				return false;
			}
		}
		
		return true;
	}
	
	public static boolean all(int i,int j,int b[][],int n,int m){
		boolean flag1=true;
		boolean flag2=true;	
		for(int ii=0;ii<n;ii++){
			if(b[ii][j]!=1){
				flag2=false;
				break;
			}
			
		}
			for(int ii=0;ii<m;ii++){
			if(b[i][ii]!=1){
				flag1=false;
				break;
			}
			
		}
		if(flag1==true ||flag2==true)
		return true;
		else
		return false;
	}
	public static void main (String[] args) throws java.lang.Exception
	{
		// your code goes here
		Scanner in=new Scanner(System.in);
	     int n=in.nextInt();
	     int m=in.nextInt();
	     int a[][]=new int[n][m];
	       int b[][]=new int[n][m];
	     boolean zero=true;
	     for(int i=0;i<n;i++){
	     	for(int j=0;j<m;j++){
	     		b[i][j]=in.nextInt();
	     		if(b[i][j]==1){
	     			zero=false;
	     		}
	     	}
	     }
	     if(zero==true){
	     	System.out.println("YES");
	     	for(int i=0;i<n;i++){
	     		for(int j=0;j<m;j++){
	     			System.out.print(b[i][j]+" ");
	     		}
	     		System.out.println();
	     	}
	     	
	     }
	     else{
	     boolean ans=false;
	     for(int i=0;i<n;i++){
	     	for(int j=0;j<m;j++){
	     		if(b[i][j]==1){
	     			if(all(i,j,b,n,m)){
	     				
	     			}
	     			else{
	     				ans=true;
	     				break;
	     			}
	     			
	     			
	     		}
	     		
	     		
	     		
	     	}
	     	if(ans==true){
	     		break;
	     	}
	     	
	     }
	     if(ans){
	     	System.out.println("NO");
	     }
	     else{
	     
	     	
	     	for(int i=0;i<n;i++){
	     		for(int j=0;j<m;j++){
	     			if(b[i][j]==0){
	     				assign(i,j,a,n,m);
	     			}
	     			
	     			
	     		}
	     	}
	     	boolean flag=false;
	     	for(int i=0;i<n;i++){
	     		for(int j=0;j<m;j++){
	     			
	     			if(a[i][j]==0){
	     				flag=true;
	     				a[i][j]=1;
	     			}
	     		}
	     	}
	     		for(int i=0;i<n;i++){
	     		for(int j=0;j<m;j++){
	     			
	     			if(a[i][j]==-1){
	     				a[i][j]=0;
	     			}
	     		}
	     	}
	     	
	     	
	     	if(flag==true){
	     		System.out.println("YES");
	     	for(int i=0;i<n;i++){
	     		
	     		for(int j=0;j<m;j++){
	     			System.out.print(a[i][j]+" ");
	     		}
	     		System.out.println();
	     		
	     	}
	     	
	     }
	     else{
	     	
	     	System.out.println("NO");
	     	
	     	
	     	
	     }
	     }
	     	
	     	
	     }
		
		
	}
}