#include<cstdio>#include<deque>#include<set>#include<cstring>using namespace std;namespace{bool flag[41][41][41][41];deque<int> Q[4];int maxx, pp;set<int> S;void dfs(){if (pp > maxx)maxx = pp;if (S.size() == 5)return;for (int i = 0; i < 4; i++)if (!Q[i].empty()){int now = Q[i].front();Q[i].pop_front();if (!flag[Q[0].size()][Q[1].size()][Q[2].size()][Q[3].size()]){flag[Q[0].size()][Q[1].size()][Q[2].size()][Q[3].size()] =true;if (S.find(now) == S.end()){S.insert(now);dfs();S.erase(now);}else{S.erase(now);pp++;dfs();pp--;S.insert(now);}}Q[i].push_front(now);}}}int main(){int n, t;while (scanf("%d", &n), n){for (int i = 0; i < 4; i++)Q[i].clear();for (int i = 0; i < n; i++)for (int j = 0; j < 4; j++){scanf("%d", &t);Q[j].push_back(t);}maxx = pp = 0;S.clear();memset(flag, 0, sizeof(flag));dfs();printf("%dn", maxx);}return 0;}


