From SEGFAULT SQUAD
About
include <bits/stdc++.h>
using namespace std; using ll = long long;
define int ll
enum color { R, B, Y, G };
color col(string s) { if (s == "Red") return R; if (s == "Blue") return B; if (s == "Yellow") return Y; return G; }
color convert(int i) { if (i == 0) return R; if (i == 1) return B; if (i == 2) return Y; return G; }
int cache[4][1001][2]; int helper(vector<unordered_map<int, int>>& dealer, vector<unordered_map<int, int>>& player, color c, int num, bool dealerTurn) {
if ((dealerTurn && dealer[c][num] == 0) || (!dealerTurn && player[c][num] == 0)) return 0;
if (cache[c][num][dealerTurn] != -1) {
    return cache[c][num][dealerTurn];
}
int dTotal = 0;
int pTotal = 0;
for (int i = 0; i < 4; i++) {
    dTotal += dealer[convert(i)][num];
    pTotal += player[convert(i)][num];
}
int totalDealer = 0;
int totalPlayer = 0;
if (dealerTurn) {
    if (dTotal < pTotal) {
        totalDealer = 2 * dTotal - 1;
        totalPlayer = 2 * dTotal;
    } else if (dTotal > pTotal) {
        totalDealer = 2 * pTotal + 1;
        totalPlayer = 2 * pTotal;
    } else {
        totalDealer = 2 * pTotal - 1;
        totalPlayer = 2 * pTotal;
    }
} else {
    if (dTotal < pTotal) {
        totalDealer = 2 * dTotal;
        totalPlayer = 2 * dTotal + 1;
    } else if (dTotal > pTotal) {
        totalDealer = 2 * pTotal;
        totalPlayer = 2 * pTotal - 1;
    } else {
        totalDealer = 2 * pTotal;
        totalPlayer = 2 * pTotal - 1;
    }
}
int res = 1;
if (dealerTurn) {
    for (int j = 0; j < 4; j++) {
        if (j == c) {
            for (int i = num + 1; i <= 1000; i++) {
                // if (player[c][i] == 0) continue;
                if (dealer[c][num] == 1)
                    res = max(res, helper(dealer, player, c, i, false) + 1);
                else
                    res = max(res, helper(dealer, player, c, i, false) + totalDealer);
            }
        } else if (j != c && dealer[convert(j)][num] > 0) {
            for (int i = num + 1; i <= 1000; i++) {
                // if (player[convert(j)][i] == 0) continue;
                res = max(res, helper(dealer, player, convert(j), i, false) + totalDealer);
            }
        }
    }
    for (int j = 0; j < 4; j++) {
        if (player[convert(j)][num] == 0) continue;
        for (int i = num + 1; i <= 1000; i++) {
            // if (dealer[convert(j)][i] == 0) continue;
            res = max(res, helper(dealer, player, convert(j), i, true) + totalPlayer);
        }
    }
} else {
    for (int j = 0; j < 4; j++) {
        if (j == c) {
            for (int i = num + 1; i <= 1000; i++) {
                // if (dealer[c][i] == 0) continue;
                if (player[c][num] == 1)
                    res = max(res, helper(dealer, player, c, i, true) + 1);
                else
                    res = max(res, helper(dealer, player, c, i, true) + totalPlayer);
            }
        } else if (j != c && player[convert(j)][num] > 0) {
            for (int i = num + 1; i <= 1000; i++) {
                // if (dealer[convert(j)][i] == 0) continue;
                res = max(res, helper(dealer, player, convert(j), i, true) + totalPlayer);
            }
        }
    }
    for (int j = 0; j < 4; j++) {
        if (dealer[convert(j)][num] == 0) continue;
        for (int i = num + 1; i <= 1000; i++) {
            // if (player[convert(j)][i] == 0) continue;
            res = max(res, helper(dealer, player, convert(j), i, false) + totalDealer);
        }
    }
}
// cout<<c<<" "<<num<<" "<<dealerTurn<<" "<<totalDealer<<" "<<totalPlayer<<" "<<" "<<endl;
// cout<<res<<endl;
return cache[c][num][dealerTurn] = res;}
// color convert(int i) { // if (i == 0) return R; // if (i == 1) return B; // if (i == 2) return Y; // return G; // }
main() { int n ; cin >> n; memset(cache, -1, sizeof(cache)); vector<unordered_map<int, int>> dealer(4), player(4); for (int i = 0; i < n; i++) { string s; int num; cin >> s >> num; dealer[col(s)][num]++; } for (int i = 0; i < n; i++) { string s; int num; cin >> s >> num; player[col(s)][num]++; } int res = 0; for (int i= 0; i < 4; i++) { for (int j = 1; j <= 1000; j++) { res = max(res, helper(dealer, player, convert(i), j, true)); } } cout<<res<<endl; }