/*
qq:1239198605
ctgu_yyf
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
struct node
{
int x,y,z;//长宽高
}e[15000];
int dp[15000];
int ans;
bool cmp(node n1,node n2)
{
if(n1.x==n2.x)
{
return n1.y>n2.y;
}
return n1.x>n2.x;
}
int main()
{
ios::sync_with_stdio(false);
int n,a,b,c;
int o=0;
while(cin>>n)
{
ans=0;
int u=0;
if(n==0)
break;
for(int i=1;i<=n;i++)
{
cin>>a>>b>>c;
e[u].x=a,e[u].y=b,e[u++].z=c;
e[u].x=a,e[u].y=c,e[u++].z=b;
e[u].x=b,e[u].y=a,e[u++].z=c;
e[u].x=b,e[u].y=c,e[u++].z=a;
e[u].x=c,e[u].y=a,e[u++].z=b;
e[u].x=c,e[u].y=b,e[u++].z=a;
}
memset(dp,0,sizeof(dp));
sort(e,e+u,cmp);
for(int i=0;i<u;i++)
{
dp[i]=1;
for(int j=0;j<i;j++)
{
if(e[i].x<e[j].x&&e[i].y<e[j].y&& 1+dp[j]>dp[i])
dp[i]=1+dp[j];
}
ans=max(ans,dp[i]);
}
cout<<ans<<endl;
}
return 0;
}