import java.io.*;
import DSinn.Justify; // Debug

public class Card_Shuffler
{
    static char[] face = {
	'T',
	'J',
	'Q',
	'K',
	'A'
	};

    public static void main (String[] args) throws IOException
    {
	String[] sname = {
	    "clubs",
	    "diamonds",
	    "hearts",
	    "spades"
	    };

	int i, j, k, l;
	int size = 52;
	String input;
	int multiple, start, temp;
	int[] deck, a, b, top, bottom, west;
	boolean[] suit;
	BufferedReader br = new BufferedReader (new FileReader ("DATA21.txt"));
	while (br.ready ())
	{
	    input = br.readLine ();
	    deck = new int [size];
	    for (i = 0 ; i < deck.length ; i++)
		deck [i] = i;
	    for (i = 0 ; i < 19 ; i += 2)
	    {
		multiple = Integer.parseInt (input.substring (i, i + 1));
		a = new int [size / multiple];
		b = new int [size - a.length];
		k = 0;
		l = 0;
		for (j = 0 ; j < deck.length ; j++)
		{
		    if ((deck [j] + 1) % multiple == 0)
			a [k++] = deck [j];
		    else
			b [l++] = deck [j];
		}
		
		System.out.print ("\nA:"); // Debug
		for (j = 0 ; j < a.length ; j++)
		    System.out.print (Justify.right ("" + a [j], 3));
		System.out.print ("\nB:");
		for (j = 0 ; j < b.length ; j++)
		    System.out.print (Justify.right ("" + b [j], 3));
		System.out.println ("");
		
		deck = new int [size];
		top = new int [b.length / 2];
		bottom = new int [b.length - top.length];
		for (j = 0 ; j < bottom.length ; j++)
		    bottom [j] = b [j * 2];
		k = top.length - 1;
		for (j = 0 ; j < top.length ; j++)
		    top [k--] = b [1 + j * 2];
		k = 0;
		for (j = 0 ; j < top.length ; j++)
		    deck [k++] = top [j];
		for (j = 0 ; j < a.length ; j++)
		    deck [k++] = a [j];
		for (j = 0 ; j < bottom.length ; j++)
		    deck [k++] = bottom [j];
		    
		System.out.print ("C:"); // Debug
		for (j = 0 ; j < deck.length ; j++)
		    System.out.print (Justify.right ("" + deck [j], 3));
	    }
	    west = new int [13];
	    k = 0;
	    for (j = 3 ; j < deck.length ; j += 4) // Every fourth card
		west [k++] = deck [j];
	    for (j = 0 ; j < west.length ; j++)
		if (west [j] == 0) // 2C to AS
		    west [j] = 51;
		else if (west [j] == 51) // AS to 2C
		    west [j] = 0;

	    for (j = 0 ; j < west.length - 1 ; j++) // BubbleSort
		for (k = j ; k < west.length ; k++)
		    if (west [j] < west [k])
		    {
			temp = west [j];
			west [j] = west [k];
			west [k] = temp;
		    }

	    System.out.print ("\nWest: ");
	    for (j = 0 ; j < west.length ; j++) // Debug
		System.out.print (west [j] + " ");
	    System.out.println ("");

	    suit = new boolean [4];
	    for (j = 0 ; j < suit.length ; j++)
		suit [j] = false;
	    for (j = 0 ; j < west.length ; j++)
		suit [west [j] / 13] = true;
	    k = 0;
	    for (j = suit.length - 1 ; j >= 0 ; j--)
		if (suit [j])
		{
		    System.out.print (sname [j] + ": ");
		    while (k < 13)
		    {
			if (west [k] / 13 < j)
			    break;
			else
			    System.out.print (valueOf (west [k++]) + " ");
		    }
		}
	    System.out.println ("");
	}
    }


    static char valueOf (int n)
    {
	int v = n % 13 + 2;
	char c;
	if (v < 10)
	    c = ("" + v).charAt (0);
	else
	    c = face [v - 10];
	return c;
    }
}
