# 13361 - Cardcaptor Sakura
## Brief
There are 10 tables (indexed from 0 to 9) and no cards on them initially.
Given a command S, Sakura has to follow the instructions below:
(1) print: print the status of each table with the format :"table_idx: cards_on_the tables\n", e.g. "0: 1 3 3 4 5\n".
Note that if there are no cards, print "No card".
(2) all num len : Place len cards on each table, and the value on each card is num .
For example, the instruction "all 3 4" changes the status of each table to "table_idx: 3 3 3 3\n";
(3)
place table_idx len
integer_sequence
: Place a stack of cards on table table_idx. len means the number of cards in the stack. An integer sequence integer_sequence of length len is given, in which each integer means the value on the placed card.
For example, the instruction will be like:
place 2 3
3 2 1
And the status of Table_2 will become:
2: 3 2 1
Note that if there are cards already on the target table, the status will be overridden.
(4) swap table_a table_b: Swap the cards on table_a and table_b.
For example:
If the origin status of table 0 and table 1 are:
0: 1 2 3
1: 4 5 6
after "swap 0 1", the status of the two tables become:
0: 4 5 6
1: 1 2 3
This instruction is valid even if one of the tables is empty.
(5) clear: Clean all the tables.
(6) exit: terminates
## Input
Commands separated by a newline character.
Note that:
1 <= the value of each card <= 13
1 <= number of cards on each table <= 10000
## Output
Status of each table.
## Solution
```c=
//by 景璞
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int *cards[10];
void Clear(void)
{
Free();
for(int i=0; i<10; i++)
cards[i] = NULL;
}
void Free(void)
{
for(int i=0; i<10; i++)
{
if(cards[i]!=NULL)
free(cards[i]);
}
}
void Print(void)
{
for(int i=0; i<10; i++)
{
if(cards[i]==NULL)
printf("%d: No card\n", i);
else
{
printf("%d: ", i);
for(int j=1; j<cards[i][0]; j++)
printf("%d ",cards[i][j]);
printf("%d\n", cards[i][cards[i][0]]);
}
}
}
void All(int num, int len)
{
for(int i=0; i<10; i++)
{
cards[i] = (int*)malloc(sizeof(int) * (len+1));
cards[i][0] = len;
for(int l=1; l<=len; l++)
cards[i][l] = num;
}
}
void Place(int cards_idx, int len)
{
if(cards[cards_idx]!=NULL)
free(cards[cards_idx]);
cards[cards_idx] = (int*)malloc(sizeof(int) * (len+1));
cards[cards_idx][0] = len;
for(int i=1; i<=len; i++)
scanf("%d", &cards[cards_idx][i]);
}
void Swap(int cards_a, int cards_b)
{
int *tmp;
tmp = cards[cards_a];
cards[cards_a] = cards[cards_b];
cards[cards_b] = tmp;
}
int main(int argc, const char * argv[]) {
Clear();
char cmd[10];
scanf("%s", cmd);
while(strcmp(cmd, "exit") !=0 )
{
if(strcmp(cmd, "all") == 0)
{
Free();
int num, len;
scanf("%d %d", &num, &len);
All(num, len);
}
else if(strcmp(cmd, "clear") == 0)
{
Clear();
}
else if(strcmp(cmd, "place") == 0)
{
int cards_idx, len;
scanf("%d %d", &cards_idx, &len);
Place(cards_idx, len);
}
else if(strcmp(cmd, "swap") == 0)
{
int cards_a, cards_b;
scanf("%d %d", &cards_a, &cards_b);
Swap(cards_a, cards_b);
}
else if(strcmp(cmd, "print") == 0)
{
Print();
}
scanf("%s", cmd);
}
return 0;
}
```