#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S max_L( S a,T b) {
return a>= b? a: b;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
int maxNumberOfFamilies( int N, vector< vector< int >> & A) {
int i;
int res = 2 * N;
int ok[ 10 ] ;
int t;
int s1;
int s2;
sort( A.begin ( ) , A.end ( ) ) ;
for ( i= ( 0 ) ; i< ( A.size ( ) ) ; i++ ) {
int j;
for ( j= ( 0 ) ; j< ( 10 ) ; j++ ) {
ok[ j] = 1 ;
}
ok[ A[ i] [ 1 ] - 1 ] = 0 ;
while ( i+ 1 < A.size ( ) && A[ i] [ 0 ] == A[ i+ 1 ] [ 0 ] ) {
i++ ;
ok[ A[ i] [ 1 ] - 1 ] = 0 ;
}
t = s1 = s2 = 1 ;
for ( j= ( 1 ) ; j< ( 5 ) ; j++ ) {
if ( ok[ j] == 0 ) {
s1 = 0 ;
}
}
for ( j= ( 5 ) ; j< ( 9 ) ; j++ ) {
if ( ok[ j] == 0 ) {
s2 = 0 ;
}
}
for ( j= ( 3 ) ; j< ( 7 ) ; j++ ) {
if ( ok[ j] == 0 ) {
t = 0 ;
}
}
res + = max_L( t, s1+ s2) - 2 ;
}
return res;
}
}
;
// cLay varsion 20200325-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// int maxNumberOfFamilies(int N, vector<vector<int>>& A) {
// int res = 2N;
// int ok[10], t, s1, s2;
// sort(A.begin(), A.end());
// rep(i,A.size()){
// rep(j,10) ok[j] = 1;
// ok[A[i][1]-1] = 0;
// while(i+1 < A.size() && A[i][0]==A[i+1][0]){
// i++;
// ok[A[i][1]-1] = 0;
// }
// t = s1 = s2 = 1;
// rep(j,1,5) if(ok[j]==0) s1 = 0;
// rep(j,5,9) if(ok[j]==0) s2 = 0;
// rep(j,3,7) if(ok[j]==0) t = 0;
// res += max(t, s1+s2) - 2;
// }
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIG1heF9MKFMgYSxUIGIpewogIHJldHVybiBhPj1iP2E6YjsKfQojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBpbnQgbWF4TnVtYmVyT2ZGYW1pbGllcyhpbnQgTiwgdmVjdG9yPHZlY3RvcjxpbnQ+PiYgQSl7CiAgICBpbnQgaTsKICAgIGludCByZXMgPSAyKk47CiAgICBpbnQgb2tbMTBdOwogICAgaW50IHQ7CiAgICBpbnQgczE7CiAgICBpbnQgczI7CiAgICBzb3J0KEEuYmVnaW4oKSwgQS5lbmQoKSk7CiAgICBmb3IoaT0oMCk7aTwoQS5zaXplKCkpO2krKyl7CiAgICAgIGludCBqOwogICAgICBmb3Ioaj0oMCk7ajwoMTApO2orKyl7CiAgICAgICAgb2tbal0gPSAxOwogICAgICB9CiAgICAgIG9rW0FbaV1bMV0tMV0gPSAwOwogICAgICB3aGlsZShpKzEgPCBBLnNpemUoKSAmJiBBW2ldWzBdPT1BW2krMV1bMF0pewogICAgICAgIGkrKzsKICAgICAgICBva1tBW2ldWzFdLTFdID0gMDsKICAgICAgfQogICAgICB0ID0gczEgPSBzMiA9IDE7CiAgICAgIGZvcihqPSgxKTtqPCg1KTtqKyspewogICAgICAgIGlmKG9rW2pdPT0wKXsKICAgICAgICAgIHMxID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yKGo9KDUpO2o8KDkpO2orKyl7CiAgICAgICAgaWYob2tbal09PTApewogICAgICAgICAgczIgPSAwOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3Ioaj0oMyk7ajwoNyk7aisrKXsKICAgICAgICBpZihva1tqXT09MCl7CiAgICAgICAgICB0ID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzICs9bWF4X0wodCwgczErczIpLSAyOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9Cn0KOwovLyBjTGF5IHZhcnNpb24gMjAyMDAzMjUtMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgbWF4TnVtYmVyT2ZGYW1pbGllcyhpbnQgTiwgdmVjdG9yPHZlY3RvcjxpbnQ+PiYgQSkgewovLyAgICAgaW50IHJlcyA9IDJOOwovLyAgICAgaW50IG9rWzEwXSwgdCwgczEsIHMyOwovLyAgICAgc29ydChBLmJlZ2luKCksIEEuZW5kKCkpOwovLyAgICAgcmVwKGksQS5zaXplKCkpewovLyAgICAgICByZXAoaiwxMCkgb2tbal0gPSAxOwovLyAgICAgICBva1tBW2ldWzFdLTFdID0gMDsKLy8gICAgICAgd2hpbGUoaSsxIDwgQS5zaXplKCkgJiYgQVtpXVswXT09QVtpKzFdWzBdKXsKLy8gICAgICAgICBpKys7Ci8vICAgICAgICAgb2tbQVtpXVsxXS0xXSA9IDA7Ci8vICAgICAgIH0KLy8gICAgICAgdCA9IHMxID0gczIgPSAxOwovLyAgICAgICByZXAoaiwxLDUpIGlmKG9rW2pdPT0wKSBzMSA9IDA7Ci8vICAgICAgIHJlcChqLDUsOSkgaWYob2tbal09PTApIHMyID0gMDsKLy8gICAgICAgcmVwKGosMyw3KSBpZihva1tqXT09MCkgdCA9IDA7Ci8vICAgICAgIHJlcyArPSBtYXgodCwgczErczIpIC0gMjsKLy8gICAgIH0KLy8gICAgIHJldHVybiByZXM7Ci8vICAgfQovLyB9Owo=