# include <iostream>
# include <algorithm>
using namespace std;
struct data_type
{
int lab;//该数据编号
int num[10];//每组数据中的sequence
int len;//用于存放到该处的最大长度
int pre;//上一个地址位置,若为999,则表示无前继
int next;//下一个地址的位置,若为999,则表示无后续
}m[30];
int cmp1(const int &a,const int &b)
{
if(a<b)
return 1;
else
return 0;
}
int cmp(const struct data_type &a,const struct data_type &b)
{
for(int i =0;i<10;++i)
{
if(a.num[i]<b.num[i])
return 1;
else if (a.num[i]>b.num[i])
return 0;
if(i==9)
return 0;
}
}
bool nest(int* a,int* b,int dim)
{
for(int i=0;i<dim;++i)
{
if(a[i]>=b[i])
return false;
else if(i==dim-1&&a[i]<b[i])
return true;
else if(i==dim-1&&a[i]==b[i])
return false;
}
}
int longest(struct data_type*a,int n,int&c)
{
int r(0),t(1);
for(int i=0;i<n;++i)
{
if(r<a[i].len||(r==a[i].len&&t>a[i].lab))
{
r=a[i].len;
t=a[i].lab;
c=i;
}
}
for(int i=0;i<r;++i)
{
if(a[c].pre==999)
{
break;
}
t=c;
c=a[c].pre;
a[c].next=t;
}
return r;
}
int main()
{
int n(0),dim(0);
while(cin>>n>>dim)
{
if(n==0)continue;
for(int i =0;i<n;++i)
{
for(int j=0;j<dim;++j)
{
cin>>m[i].num[j];
}
for(int j=dim;j<10;++j)
{
m[i].num[j]=0;
}
m[i].lab=i+1;
m[i].len=1;
m[i].pre=999;
m[i].next=999;
sort(m[i].num,m[i].num+dim,cmp1);
}
sort(m,m+n,cmp);
for(int i=0;i<n-1;++i)
{
bool flag=true;
for(int j=i+1;j<n;++j)
{
if(nest(m[i].num,m[j].num,dim))
{
if(flag)
m[i].next=j;
if(m[i].len>=m[j].len-1)
{
m[j].len=m[i].len+1;
m[j].pre=i;
}
flag=false;
}
}
}
int c(0);
int r=longest(m,n,c);
// for(int i=0;i<n;++i)
// {
// for(int j=0;j<dim;++j)
// {
// cout<<m[i].num[j]<<"t";
// }
// cout<<m[i].lab<<"t"<<m[i].len<<"t";
// cout<<m[i].pre<<"t"<<m[i].next<<endl;
// }
//
// cout<<c<<endl;
cout<<r<<endl;
for(int i=0;i<r-1;++i)
{
cout<<m[c].lab<<" ";
c=m[c].next;
}
cout<<m[c].lab<<endl;
}
}