/* ITP1_6_B */
#include <stdio.h>

#define NO_EXIST -1		// ?????¨??????????????????????????????
#define EXIST 1			// ?????¨???????????????????????????

#define MAX 52			// ????????????????????§?????°

#define CODE_SPADE 83	// ????????????"S"??????????????????
#define CODE_HEART 72	// ?????????"H"??????????????????
#define CODE_CLUB 67	// ?????????"C"??????????????????
#define CODE_DIA 68		// ?????????"D"??????????????????

/* ???????????????????????????????????? */
enum trump_mark
{
	SPADE = 0,		// ????????????
	HEART = 13,		// ?????????
	CLUB = 26,		// ?????????
	DIA = 39,		// ?????????
	INVALID = -1	// ?????????
};

/* ????????????????????????1?????????????§??????? */
struct trump_card
{
	enum trump_mark mark;	// ?????????
	short number;			// ??°???
	short is_exist;			// ?????¨????????°
};

/* ???????????????????????????????????????????????°????????? */
enum trump_mark get_mark_from_char(char mark_char)
{
	enum trump_mark ret_code = -1;
	switch( mark_char )
	{
	case CODE_SPADE:			// ??\??????'S'?????¨???
		ret_code = SPADE;
		break;
	case CODE_HEART:			// ??\??????'H'?????¨???
		ret_code = HEART;
		break;
	case CODE_CLUB:				// ??\??????'C'?????¨???
		ret_code = CLUB;
		break;
	case CODE_DIA:				// ??\??????'D'?????¨???
		ret_code = DIA;
		break;
	default:
		break;
	}
	
	return ret_code;
}

/* ???????????????????????°????????????????????? */
char get_char_from_mark(enum trump_mark mark)
{
	char ret_char = '\0';
	
	switch( mark )
	{
	case SPADE:					// ?????????????????????????????¨???
		ret_char = CODE_SPADE;
		break;
	case HEART:					// ??????????????????????????¨???
		ret_char = CODE_HEART;
		break;
	case CLUB:					// ??????????????????????????¨???
		ret_char = CODE_CLUB;
		break;
	case DIA:					// ??????????????????????????¨???
		ret_char = CODE_DIA;
		break;
	default:
		break;
	}
	
	return ret_char;
}

/* ?????????????????±????????? */
struct trump_card create_card_info(char mark_char, short num)
{
	struct trump_card card_info;
	card_info.mark = get_mark_from_char(mark_char);
	card_info.number = num;
	card_info.is_exist = NO_EXIST;
	return card_info;
}

/* ????????°????§??????????????????????????´???´???????????? */
short get_strage_index(char mark_char, short number)
{
	// ?????°???????????????????????°???????????????
	short mark_num = get_mark_from_char(mark_char);
	return mark_num + (number - 1);
}

/* ???????????¢??° */
int main(void)
{
	// ?§??????????????????£?¨?
	struct trump_card cards[MAX];
	
	// ????????????????§?????????????????????????
	short ii;
	char mark_char = '\0';
	for( ii = 0; ii < MAX; ii++)
	{
		// 0???12????????????????????????????????±
		if( SPADE <= ii && ii < HEART )
		{
			mark_char = CODE_SPADE;
		}
		// 13???25?????????????????????????????±
		else if( HEART <= ii && ii < CLUB )
		{
			mark_char = CODE_HEART;
		}
		// 26???38?????????????????????????????±
		else if( CLUB <= ii && ii < DIA )
		{
			mark_char = CODE_CLUB;
		}
		// 39??????51?????????????????????????????±
		else if( DIA <= ii && ii < MAX)
		{
			mark_char = CODE_DIA;
		}
		
		cards[ii] = create_card_info(mark_char, ((ii % 13) + 1));
	}
	
	// ??\?????????????????°?????????
	short length = 0;
	scanf("%d", &length);
	
	// ??\???(???????????????)?????????
	short num = 0;
	short index = 0;
	for( ii = 0; ii < length; ii++) {
		mark_char = '\0';
		num = 0;
		index = 0;
		scanf("\n%c%hd", &mark_char, &num);
		// ?????????????????????????´??????????????????´????????????
		index = get_strage_index(mark_char, num);
//		printf("mark_char = %c number = %hd index = %hd\n", mark_char, num, index);
		
		// ????????§????????´???????????¨????????°???EXIST?????????
		cards[index].is_exist = EXIST;
	}
	
	// ?????¨????????????????????????????????????
	for( ii = 0; ii < MAX; ii++ )
	{
//		printf("%c %hd %hd\n", get_char_from_mark(cards[ii].mark), cards[ii].number, cards[ii].is_exist);
		if( NO_EXIST == cards[ii].is_exist )
		{
			printf("%c %hd\n", get_char_from_mark(cards[ii].mark), cards[ii].number);
		}
	}
	
	return 0;
}

Measured memory_bytes: 596