1 #include<iostream>
2 #include<stdio.h>
3 #include<math.h>
4 #include<algorithm>
5 #include<string.h>
6 #include<string>
7 #include<ctime>
8 #include<queue>
9 #include<list>
10 #include<map>
11 #include<set>
12 #define INF 999999999
13 #define MAXN 10000000
14 using namespace std;
15 struct Nod
16 {
17 int a[5];
18 }node[1010];
19
20 int cmp(Nod aa,Nod bb)
21 {
22 return aa.a[0]<bb.a[0];
23 }
24
25 int comp(Nod aa,Nod bb)
26 {
27 if(aa.a[0]<bb.a[0]&&aa.a[1]<bb.a[1]&&aa.a[2]<bb.a[2])
28 return 1;
29 return 0;
30 }
31
32 int main()
33 {
34 int n;
35 while(~scanf("%d",&n))
36 {
37 int i;
38 for(i=0;i<n;i++)
39 {
40 scanf("%d%d%d",&node[i].a[0],&node[i].a[1],&node[i].a[2]);
41 sort(node[i].a,node[i].a+3);
42 }
43 sort(node,node+n,cmp);
44 int dp[1010];
45 memset(dp,0,sizeof(dp));
46 int j,maks,temp=-1;
47 dp[0]=1;
48 for(i=1;i<n;i++)
49 {
50 maks=0;
51 for(j=0;j<i;j++)
52 {
53 if(maks<dp[j]&&comp(node[j],node[i]))
54 {
55 maks=dp[j];
56 }
57 }
58 dp[i]=maks+1;
59 if(temp<dp[i])
60 temp=dp[i];
61 }
62 printf("%d\n",temp);
63 }
64 return 0;
65 }