#include <bits/stdc++.h>
using namespace std;
int n, f[(1 << 16) + 1][20], color[20], b[100][100], mc, num[20], t[20][20], lx[20], ly[20], rx[20], ry[20], ans = INT_MAX;
bool check(int sta, int x){
for(int i = 1; i <= num[x]; i++){
if(((i << (t[x][i] - 1)) & sta) != (i << (t[x][i] - 1))){
return false;
}
}
return true;
}
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> lx[i] >> ly[i] >> rx[i] >> ry[i] >> color[i];
if(color[i] > mc){
mc = color[i];
}
for(int j = lx[i]; j < rx[i]; j++){
for(int k = ly[i]; k < ry[i]; k++){
b[j][k] = i;
}
}
}
for(int i = 1; i <= n; i++){
int k = lx[i] - 1;
if(k < 0){
continue;
}
for(int j = ly[i]; j < ry[i];){
if(b[k][j]){
int l = j;
while(b[k][l] == b[k][j]){
l++;
}
num[i]++;
t[i][num[i]] = b[k][j];
j = l;
}
}
}
for(int i = 1; i <= mc; i++){
f[0][i] = 1;
}
for(int sta = 1; sta <= ((1 << n) - 1); sta++){
for(int i = 1; i <= n; i++){
if(((1 << (i - 1)) & sta) == (1 << (i - 1)) && check(sta, i)){
for(int j = 1; j <= mc; j++){
if(j != color[i]){
f[sta][color[i]] = min(f[sta][color[i]], f[sta - (1 << (i - 1))][j] + 1);
}
f[sta][color[i]] = min(f[sta][color[i]], f[sta - (1 << (i - 1))][color[i]]);
}
}
}
}
for(int i = 1; i <= mc; i++)
ans = min(ans, f[(1 << n) - 1][i]);
cout << ans << endl;
return 0;
}