#include <bits/stdc++.h>
using namespace std;
struct node {
int px1;
int px2;
int py1;
int py2;
int clr;
} tgs[21];
bool cmp(node a, node b)
{
return a.py1 < b.py1;
}
int lbit(int x)
{
return x & -x;
}
int t;
int log2(int x)
{
t = 0;
while (x > 0) {
x = x >> 1;
t++;
}
return t-1;
}
int n, dp[191981][21], k, dg, vis[114], cl, sz;
bool flag;
vector<int> fa[21];
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> tgs[i].px1 >> tgs[i].py1 >> tgs[i].px2 >> tgs[i].py2 >> tgs[i].clr;
sort(tgs, tgs + n, cmp);
for(int i=0;i<n;i++)
{
if(tgs[i].py1==0)
{
for(int j=tgs[i].px1;j<tgs[i].px2;j++)
vis[j]=i;
continue;
}
k=vis[tgs[i].px1];
fa[i].push_back(k);
for(int j=tgs[i].px1;j<tgs[i].px2;j++)
{
if(k!=vis[j])
{
k=vis[j];
fa[i].push_back(k);
}
vis[j]=i;
}
}
for (int i = 0; i <= 20;i++)
dp[0][i] = 1;
for (int i = 1; i < (1<<n); i++) {
k = i;
for(int j=1;j<=20;j++)
dp[i][j] = 11451419;
while (k > 0)
{
dg = log2(lbit(k));
cl = tgs[dg].clr;
flag=1;
sz=fa[dg].size();
for(int j=0;j<sz;j++)
{
flag=(i>>fa[dg][j])%2;
if (flag)
break;
}
if(!flag)
{
k-=lbit(k);
continue;
}
for (int j = 1; j <= 20; j++)
if (cl == j)
dp[i][cl] = min(dp[i][cl], dp[i - lbit(k)][cl]);
else
dp[i][cl] = min(dp[i][cl], dp[i - lbit(k)][j] + 1);
k-=lbit(k);
}
}
int ans = 11451419;
for (int i = 1; i <= 20; i++)
ans = min(ans, dp[(1<<n) - 1][i]);
cout << ans;
return 0;
}