#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int totalbox,DIM;
int len[32],order[32],pred[32];
class box{
int dim[12];
public:
void input(); //taking input
void dimsort(); //dimension sorting
int operator<<(box BOX1); //lexico sorting;
int operator>(box BOX1); //lis compare
box operator^(box &BOX1); //swap box's
};
void box::input()
{
int i;
for(i=1;i<=DIM;i++)cin>>dim[i];
return;
}
void box::dimsort()
{ sort(dim+1,dim+1+DIM);
return;
}
int box::operator<<(box BOX1)
{ int i;
for(i=1;i<=DIM;i++){if(dim[i]<BOX1.dim[i])return 1;
if(dim[i]>BOX1.dim[i])return 0;
}
return 0;
}
int box::operator>(box BOX1)
{ int i;
for(i=1;i<=DIM;i++)if(dim[i]<=BOX1.dim[i])return 0;
return 1;
}
box box::operator^(box &BOX1)
{
int i;
for(i=1;i<=DIM;i++)swap(dim[i],BOX1.dim[i]);
return *this;
}
void setvalue()
{
int i;
for(i=1;i<=totalbox;i++){order[i]=i;len[i]=1;
}
return;
}
int main()
{ int signal=0;
while(cin>>totalbox>>DIM)
{ if(signal)cout<<endl;
box BOX[32];
int i,j;
setvalue();
for(i=1;i<=totalbox;i++){BOX[i].input();
BOX[i].dimsort();
}
for(i=1;i<totalbox;i++)
for(j=i+1;j<=totalbox;j++)
if(BOX[j]<<BOX[i]){ BOX[j]^BOX[i];
swap(order[j],order[i]);
}
for(i=1;i<totalbox;i++)
for(j=i+1;j<=totalbox;j++){ if(BOX[j]>BOX[i] && len[i]+1>len[j]){len[j]=len[i]+1;
pred[j]=i;
}
}
int max=0,maxel;;
for(i=1;i<=totalbox;i++)if(max<len[i]){max=len[i];maxel=i;}
int rev[32];
rev[max]=order[maxel];
for(i=max-1;i>0;i--){ rev[i]=order[pred[maxel]];
maxel=pred[maxel];
}
cout<<max<<endl;
cout<<rev[1];
for(i=2;i<=max;i++)cout<<" "<<rev[i];
cout<<endl;
signal=1;
}
return 0;
}
কোন মন্তব্য নেই:
একটি মন্তব্য পোস্ট করুন