#include <iostream>
#include <algorithm>
#include <vector>

#define RED		0	//RED 	: 1-9
#define GREEN	10	//GREEN : 11-19
#define BLUE	20	//BLUE	: 21-29

#define SENTINEL 50

using namespace std;

int check_delete(vector<int> &card)
{
	int set[3];
	int find_index = 1;
	set[0] = 0;
	//先頭に番兵があったら
	if (card[0] == SENTINEL) return -1;
	//同じ数字3つの場合を探索
	for(int i=1; i<(int)card.size(); i++){
		if (card[i] == card[0]){
			set[find_index] = i;
			find_index++;
			if (find_index == 3){
				//セットができたら全削除
				for(int j=2; j>=0; j--){
					card.erase(card.begin()+set[j]);
				}
				return 1;
			}
		}
	}
	find_index = 1;
	set[0] = 0;
	//階段の3つの場合を探索
	for(int i=1; i<(int)card.size(); i++){
		if (card[i] == card[0] + find_index){
			set[find_index] = i;
			find_index++;
			if (find_index == 3){
				//セットができたら全削除
				for(int j=2; j>=0; j--){
					card.erase(card.begin()+set[j]);
				}
				return 1;
			}
		}
	}
	return 0;
}

int main(void)
{
	int T;
	cin >> T;
	for(int i=0; i<T; i++){
		vector<int> card(10);
		//カードの番号入力
		for(int j=0; j<9; j++){
			cin >> card[j];
		}
		//番兵を置く
		card[9] = SENTINEL;
		//カードの色入力
		for(int j=0; j<9; j++){
			char color;
			cin >> color;
			switch(color){
				case 'R':
					card[j] += RED;
					break;
				case 'G':
					card[j] += GREEN;
					break;
				case 'B':
					card[j] += BLUE;
			}
		}
		//識別番号でソート
		sort(card.begin(), card.end());
		//組を作って消しまくる
		while(check_delete(card) == 1);
		//出力
		if (card[0] == SENTINEL){
			cout << 1 << endl;
		}else{
			cout << 0 << endl;
		}
	}
	return 0;
}
