Problem: On the way to school, Karen became fixated on the puzzle game on her phone!

<image>

The game is played as follows. In each level, you have a grid with n rows and m columns. Each cell originally contains the number 0.

One move consists of choosing one row or column, and adding 1 to all of the cells in that row or column.

To win the level, after all the moves, the number in the cell at the i-th row and j-th column should be equal to gi, j.

Karen is stuck on one level, and wants to know a way to beat this level using the minimum number of moves. Please, help her with this task!

Input

The first line of input contains two integers, n and m (1 ≤ n, m ≤ 100), the number of rows and the number of columns in the grid, respectively.

The next n lines each contain m integers. In particular, the j-th integer in the i-th of these rows contains gi, j (0 ≤ gi, j ≤ 500).

Output

If there is an error and it is actually not possible to beat the level, output a single integer -1.

Otherwise, on the first line, output a single integer k, the minimum number of moves necessary to beat the level.

The next k lines should each contain one of the following, describing the moves in the order they must be done:

  * row x, (1 ≤ x ≤ n) describing a move of the form "choose the x-th row". 
  * col x, (1 ≤ x ≤ m) describing a move of the form "choose the x-th column". 



If there are multiple optimal solutions, output any one of them.

Examples

Input

3 5
2 2 2 3 2
0 0 0 1 0
1 1 1 2 1


Output

4
row 1
row 1
col 4
row 3


Input

3 3
0 0 0
0 1 0
0 0 0


Output

-1


Input

3 3
1 1 1
1 1 1
1 1 1


Output

3
row 1
row 2
row 3

Note

In the first test case, Karen has a grid with 3 rows and 5 columns. She can perform the following 4 moves to beat the level:

<image>

In the second test case, Karen has a grid with 3 rows and 3 columns. It is clear that it is impossible to beat the level; performing any move will create three 1s on the grid, but it is required to only have one 1 in the center.

In the third test case, Karen has a grid with 3 rows and 3 columns. She can perform the following 3 moves to beat the level:

<image>

Note that this is not the only solution; another solution, among others, is col 1, col 2, col 3.

Solution (in JAVA):

Solution:
import java.util.Scanner;
import java.io.*;
import java.util.*;
import java.math.*;
import java.lang.*;
import static java.lang.Math.*;

public class main implements Runnable{

    static ArrayList <Integer> adj[];
    static int co=0,f=0;

    static void Check2(int n){
        adj=new ArrayList[n+1];
        for(int i=0;i<=n;i++){
            adj[i]=new ArrayList<>();
        }

    }
    static void add(int i,int j){

        adj[i].add(j);
        adj[j].add(i);
    }
    public static void main(String[] args)  {
        new Thread(null, new main(), "Check2", 1<<26).start();// to increse stack size in java
    }
    static long mod=(long)(1e9+7);
    public void run() {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        //Scanner in=new Scanner(System.in);

        InputReader in = new InputReader(System.in);
        PrintWriter w = new PrintWriter(System.out);


          int n=in.nextInt();
          int m=in.nextInt();

          int a[][]=new int[n][m];
          int b[][]=new int[n][m];

        int d[]=new int[n];
        int e[]=new int[m];
          for(int i=0;i<n;i++){

              for(int j=0;j<m;j++)a[i][j]=in.nextInt();
          }


          ArrayList <Integer> r=new ArrayList<>();
        ArrayList <Integer> c=new ArrayList<>();
StringBuilder sb=new StringBuilder();

if(n<=m){
    int cnt=0;
     for(int i=0;i<n;i++){
        		
        		long min=601;
        		for(int j=0;j<m;j++){
        			min=Math.min(a[i][j], min);
        		}
        		for(int j=0;j<m;j++){
        				a[i][j]-=min;
        		}
        		for(int j=0;j<min;j++){
        		cnt++;
        			sb.append("row "+(i+1)+"\n");
        		}
        	}
        	
        	for(int i=0;i<m;i++){
        		long min=601;
        		for(int j=0;j<n;j++){
        			min=Math.min(a[j][i], min);
        		}
        		for(int j=0;j<n;j++){
    				a[j][i]-=min;
    		}
        		for(int j=0;j<min;j++){
        			cnt++;
        			sb.append("col "+(i+1)+"\n");
        		}
        	}
    int gt=0;
        	for(int i=0;i<n;i++){
        		for(int j=0;j<m;j++){
        			if(a[i][j]!=0){gt=1;
        			}
        		}
        	}
        if(gt==1)w.println(-1);
    else{
        w.println(cnt);
        w.println(sb);
        
    }
}
        else{
            
             int cnt=0;
     for(int i=0;i<m;i++){
        		
        		long min=601;
        		for(int j=0;j<n;j++){
        			min=Math.min(a[j][i], min);
        		}
        		for(int j=0;j<n;j++){
        				a[j][i]-=min;
        		}
        		for(int j=0;j<min;j++){
        		cnt++;
        			sb.append("col "+(i+1)+"\n");
        		}
        	}
        	
        	for(int i=0;i<n;i++){
        		long min=601;
        		for(int j=0;j<m;j++){
        			min=Math.min(a[i][j], min);
        		}
        		for(int j=0;j<m;j++){
    				a[i][j]-=min;
    		}
        		for(int j=0;j<min;j++){
        			cnt++;
        			sb.append("row "+(i+1)+"\n");
        		}
        	}
    int gt=0;
        	for(int i=0;i<n;i++){
        		for(int j=0;j<m;j++){
        			if(a[i][j]!=0){gt=1;
        			}
        		}
        	}
        if(gt==1)w.println(-1);
    else{
        w.println(cnt);
        w.println(sb);
        
    }

        }







        w.close();
    }
    static  String fin="";
    static  void dfs(int i,int v[],String p,int des,char c[]){


        if(v[i]==1)return ;
          if(i==des){
              fin=p+c[i-1];
              return;
          }
        v[i]=1;

        Iterator <Integer> it=adj[i].iterator();
        while(it.hasNext()){
            int q=it.next();
            dfs(q,v,p+c[q-1],des,c);
        }





    }


    static long power(long x,long y){
        if(y==0)return 1%mod;
        if(y==1)return x%mod;


        long res=1;
        x=x%mod;
        while(y>0){


            if((y%2)!=0){
                res=(res*x)%mod;
            }


            y=y/2;
            x=(x*x)%mod;
        }


        return res;



    }


    static  int gcd(int a,int b){

        if(b==0)return a;
        return gcd(b,a%b);
    }

    static  void sev(int a[],int n){

        for(int i=2;i<=n;i++)a[i]=i;
        for(int i=2;i<=n;i++){

            if(a[i]!=0){
                for(int j=2*i;j<=n;){

                    a[j]=0;
                    j=j+i;
                }
            }

        }

    }

    static class pair implements Comparable<pair> {

        int x,y;
        pair(int c,int d){
            x=c;
            y=d;
        }

        public int compareTo(pair o){

            return (this.x-o.x);   //sort in incrementing order w.r.t to c
        }



    }

    static class node{

        int y;
        int val;

        node(int a,int b){

            y=a;
            val=b;

        }


    }
    static  void rec(String s,int a,int b,int n){

        if(b==n){
            System.out.println(s);
            return ;
        }
        String p=s;
        if(a>b){
            s=p+")" ;
            rec(s,a,b+1,n);
        }
        if(a<n){
            s=p+"(";
            rec(s,a+1,b,n);
        }




    }

    static class InputReader
    {
        private InputStream stream;
        private byte[] buf = new byte[1024];
        private int curChar;
        private int numChars;
        private SpaceCharFilter filter;

        public InputReader(InputStream stream)
        {
            this.stream = stream;
        }

        public int read()
        {
            if (numChars==-1)
                throw new InputMismatchException();

            if (curChar >= numChars)
            {
                curChar = 0;
                try
                {
                    numChars = stream.read(buf);
                }
                catch (IOException e)
                {
                    throw new InputMismatchException();
                }

                if(numChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }

        public String nextLine()
        {
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            String str = "";
            try
            {
                str = br.readLine();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return str;
        }
        public int nextInt()
        {
            int c = read();

            while(isSpaceChar(c))
                c = read();

            int sgn = 1;

            if (c == '-')
            {
                sgn = -1;
                c = read();
            }

            int res = 0;
            do
            {
                if(c<'0'||c>'9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            while (!isSpaceChar(c));

            return res * sgn;
        }

        public long nextLong()
        {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-')
            {
                sgn = -1;
                c = read();
            }
            long res = 0;

            do
            {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            while (!isSpaceChar(c));
            return res * sgn;
        }

        public double nextDouble()
        {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-')
            {
                sgn = -1;
                c = read();
            }
            double res = 0;
            while (!isSpaceChar(c) && c != '.')
            {
                if (c == 'e' || c == 'E')
                    return res * Math.pow(10, nextInt());
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            if (c == '.')
            {
                c = read();
                double m = 1;
                while (!isSpaceChar(c))
                {
                    if (c == 'e' || c == 'E')
                        return res * Math.pow(10, nextInt());
                    if (c < '0' || c > '9')
                        throw new InputMismatchException();
                    m /= 10;
                    res += (c - '0') * m;
                    c = read();
                }
            }
            return res * sgn;
        }

        public String readString()
        {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            StringBuilder res = new StringBuilder();
            do
            {
                res.appendCodePoint(c);
                c = read();
            }
            while (!isSpaceChar(c));

            return res.toString();
        }

        public boolean isSpaceChar(int c)
        {
            if (filter != null)
                return filter.isSpaceChar(c);
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }

        public String next()
        {
            return readString();
        }

        public interface SpaceCharFilter
        {
            public boolean isSpaceChar(int ch);
        }
    }







}