Problem:
Finding Missing Cards

Taro is going to play a card game. However, now he has only n cards, even though there should be 52 cards (he has no Jokers).

The 52 cards include 13 ranks of each of the four suits: spade, heart, club and diamond.

Input

In the first line, the number of cards n (n ≤ 52) is given.

In the following n lines, data of the n cards are given. Each card is given by a pair of a character and an integer which represent its suit and rank respectively. A suit is represented by 'S', 'H', 'C' and 'D' for spades, hearts, clubs and diamonds respectively. A rank is represented by an integer from 1 to 13.

Output

Print the missing cards. The same as the input format, each card should be printed with a character and an integer separated by a space character in a line.
Arrange the missing cards in the following priorities:

Print cards of spades, hearts, clubs and diamonds in this order.

If the suits are equal, print cards with lower ranks first.

Sample Input

47
S 10
S 11
S 12
S 13
H 1
H 2
S 6
S 7
S 8
S 9
H 6
H 8
H 9
H 10
H 11
H 4
H 5
S 2
S 3
S 4
S 5
H 12
H 13
C 1
C 2
D 1
D 2
D 3
D 4
D 5
D 6
D 7
C 3
C 4
C 5
C 6
C 7
C 8
C 9
C 10
C 11
C 13
D 9
D 10
D 11
D 12
D 13

Sample Output

S 1
H 3
H 7
C 12
D 8

Note

      解説

Solution in Scala (judge verdict: Accepted)

import java.util.Scanner

object Main extends App {
  // def readALine(c:Int, ac:List[Int]):List[Int] =
  //   if (c > 0) readALine(c-1, sc.nextInt::ac) else ac.reverse
  // def readLines(r:Int, c:Int, ac:List[List[Int]]):List[List[Int]] =
  //   if (r > 0) readLines(r-1, c, readALine(c, Nil)::ac) else ac.reverse
  def readLines(r:Int, ac:List[(String,Int)]):List[(String,Int)] =
    if (r > 0) readLines(r-1, (sc.next, sc.nextInt)::ac) else ac
  val sc = new Scanner(System.in)
  val N = sc.nextInt
  val ls = readLines(N, Nil).map(_ match {
      case ("S", r) => ("S", r, 0)
      case ("H", r) => ("H", r, 1)
      case ("C", r) => ("C", r, 2)
      case ("D", r) => ("D", r, 3)
    }).sortWith((a,b) => {
      val (s,t,u) = a
      val (v,w,x) = b
      if (u == x) t < w else u < x
    })

  type Card = (String, Int, Int)

  def solver(ls:List[Card]):List[Card] = {
    val Suits = List("S","H","C","D")
    def suit(ls:List[Card],suits:List[String],ac:List[Card]):List[Card] = {
      if (suits.isEmpty) ac.reverse else {
        var (restCards, lostCards) = rank(ls, suits.head,(1 to 13).toList,ac)
        suit(restCards,suits.tail,lostCards)
      }
    }
    def rank(ls:List[Card],suit:String,ranks:List[Int],ac:List[Card]):(List[Card],List[Card]) = {
      if (ranks.isEmpty) (ls, ac) else {
        if (ls.isEmpty) rank(ls, suit, ranks.tail, (suit,ranks.head,0)::ac)
        else {
          var (s, r, o) = ls.head
          if (suit == s && ranks.head == r) rank(ls.tail, suit, ranks.tail, ac)
          else rank(ls, suit, ranks.tail, (suit,ranks.head,0)::ac)
        } 
      }
    }
    suit(ls,Suits,Nil)
  }

  for (t <- solver(ls)) {
    var (s, r, o) = t
    println(s"$s $r")
  }
}