
/**
103
**/
#include<stdio.h>
#include<stdlib.h>

#define MAXN  33

int B[MAXN][1][12];
int St[MAXN], V[MAXN];
int P[MAXN], N, D;

int com(const void *a, const  void *s) {
   return *(int *)a - *(int *)s;
}


int Biger(int n, int m){
       int i;
       for(i = 0; i<D; i++)
	          if(B[n][0][i] <= B[m][0][i])
	                               return 0;
       return 1;
}

void Sort() {
  int i, j, Temp;
  for(i = 0; i<N-1; i++) {
    for(j = i+1; j<N; j++) {
       if(Biger(St[i], St[j])) {
	  Temp = St[i];
	  St[i] = St[j];
	  St[j] = Temp;
       }
    }
  }
}

void Print(int n){
   if(P[n] == -1) {
     printf("%d",St[n]+1);
     return;
   }
    Print(P[n]);
    printf(" %d",St[n]+1);
}

void SolvedCase() {
     int i, j, max, largest= 0, last;
     int par;
     Sort();
     for(i = 0; i<N; i++) {
       max = 0;  par = -1;
       for(j = i-1; j>=0 ; j--)   {
	     if(Biger(St[i], St[j])) {
	       if(V[j]>max){
		           max = V[j];
		           par = j;
	       }
	     }
       }
       P[i] = par;
       V[i] = max+1;
       if(V[i] >largest ){
	           largest = V[i];
	           last = i;
       }
     }
     printf("%d\n",largest);
     Print(last);
     putchar('\n');
}


void ReadCase(){
    int i, j;
    for(i = 0; i<N; i++) {
      St[i] = i;
      for(j = 0; j<D; j++)
	          scanf("%d",&B[i][0][j]);
      qsort(B[i][0],D,sizeof(int),com);
   }
}


int main() {
	  //freopen("103.in","r",stdin);
      while(scanf("%d%d",&N,&D) == 2) {
	         ReadCase();
	         SolvedCase();
      }
	  return 0;
}



