Bob의 루미큐브
시간 제한2.5초메모리 제한512 MB
손에 든 타일과 이미 규칙에 맞게 놓인 테이블 타일이 주어질 때, 테이블 전체가 그룹과 런으로 나뉘는 상태를 유지하면서 밥이 낼 수 있는 손 타일의 최대 개수를 구한다.
문제
Bob은 루미큐브 게임을 즐긴다. Bob이 가진 카드와 테이블에 이미 놓여 있는 카드를 모두 알 때, Bob이 낼 수 있는 카드 개수의 최댓값을 출력하시오.
루미큐브의 게임 규칙은 다음과 같다.
- 루미큐브는 1부터 7까지의 숫자가 적힌 4가지 색깔(blue, red, yellow, black)의 카드로 하는 게임이며, 총 28개의 카드로 진행한다.
- 특정 숫자와 특정 색깔을 가진 카드는 정확히 하나 존재한다.
- Bob이 카드를 낼 때, 테이블에 놓인 카드들이 루미큐브세트들로 구성되도록 해야 한다.
- 루미큐브세트에는 그룹과 연속이 있다. 그룹은 색이 다르지만 숫자는 같은 카드 3개 또는 4개를 말하고, 연속은 색이 같고 숫자가 연속되는 3개 이상의 카드를 말한다.
- 테이블에 놓인 카드들이 루미큐브세트로 구성되었다는 것은, 카드들을 적당한 묶음으로 분할해 모든 묶음이 루미큐브세트를 이루도록 할 수 있다는 것이다.
- Bob이 카드를 낼 때, 루미큐브세트를 구성하기 위해 테이블 위에 놓인 카드들을 활용할 수 있다. 테이블 위에 놓인 카드들은 여전히 루미큐브세트들로 구성되어야 한다.

입력
첫 줄에는 Bob이 가지고 있는 카드의 개수 n이 주어진다. (1 ≤ n ≤ 28)
둘째 줄에는 Bob이 가지고 있는 카드에 대한 정보가 사이에 공백을 두고 주어진다.
셋째 줄에는 테이블에 놓인 카드의 개수 m이 주어진다. (0 ≤ m ≤ 28-n)
넷째 줄에는 테이블에 놓인 카드에 대한 정보가 사이에 공백을 두고 주어진다.
카드들에 대한 정보는 색(char형)숫자(int형)로 주어진다. 예시 입출력을 참고하여라.
단, 테이블에 놓인 카드들은 루미큐브세트들로 구성되어 있음이 보장되며, 동일한 카드는 두 번 이상 입력되지 않는다.
출력
Bob이 낼 수 있는 카드 개수의 최댓값을 출력한다.