# 13383 - Cardcaptor Sakura2
## Brief
The problem is modified from 13361 - Cardcaptor Sakura.
You have to implement two more instructions (1) shiftleft (2) shiftright in this problem.
## 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 Free(void);
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[15];
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();
}
else if(strcmp(cmd, "shiftleft") == 0)
{
int *cards_tmp[10];
for(int i = 0; i<10; i++)
cards_tmp[i] = cards[i];
for(int i = 0; i<9; i++)
{
cards[i] = cards_tmp[i+1];
}
cards[9] = cards_tmp[0];
}
else if(strcmp(cmd, "shiftright") == 0)
{
int *cards_tmp[10];
for(int i = 0; i<10; i++)
cards_tmp[i] = cards[i];
for(int i = 1; i<10; i++)
{
cards[i] = cards_tmp[i-1];
}
cards[0] = cards_tmp[9];
}
scanf("%s", cmd);
}
return 0;
}
```