#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char a[2][100];
char p[300];
struct data
{
char suit[52];
char size[52];
int num;
} pk[55];
int top[52];
int three(int i,int len)
{
int j;
top[i-3]++;
pk[i-3].num+=pk[i].num;
pk[i-3].size[top[i-3]]=pk[i].size[top[i]];
pk[i-3].suit[top[i-3]]=pk[i].suit[top[i]];
//pk[i].suit[top[i]]=pk[i].suit[top[i-1]];
//pk[i].size[top[i]]=pk[i].size[top[i-1]];
top[i]--;
if(top[i]<0){
for(j=i; j<len; j++)
{
pk[j].num=pk[j+1].num;
pk[j].size[top[j]]=pk[j+1].size[top[j]];
pk[j].suit[top[j]]=pk[j+1].suit[top[j]];
}
pk[len].size[top[j]]='\0';
pk[len].suit[top[j]]='\0';
pk[j].num='\0';}
}
int one(int i,int len)
{
int j;
top[i-1]++;
pk[i-1].num+=pk[i].num;
pk[i-1].size[top[i]]=pk[i].size[top[i]];
pk[i-1].suit[top[i]]=pk[i].suit[top[i]];
//pk[i].suit[top[i]]=pk[i].suit[top[i-1]];
//pk[i].size[top[i]]=pk[i].size[top[i-1]];
top[i]--;
if(top[i]<0)
{for(j=i; j<len; j++)
{
pk[j].num=pk[j+1].num;
pk[j].size[top[j]]=pk[j+1].size[top[j]];
pk[j].suit[top[j]]=pk[j+1].suit[top[j]];
}
pk[j].size[top[j]]='\0';
pk[j].suit[top[j]]='\0';
pk[j].num='\0';}
}
int judge()
{
int i,j,k,len=52,len1=52;
for(i=0; i<len; i++)
top[i]=0;
for(i=0; i<len; i++)
{
if(i>2&&pk[i].suit==pk[i-3].suit||pk[i].size==pk[i-3].size)
{
len--;
three(i,len);
i=0;
}
if(i>0&&(pk[i].suit==pk[i-1].suit||pk[i].size==pk[i-1].size))
{
len--;
one(i,len);
i=0;
}
}
//for(i=0; i<len; i++)
//printf("%c%c,",pk[i].size,pk[i].suit);
if(len!=1)
printf("%d piles remaining:",len);
else
printf("%d pile remaining:",len);
for(i=0; i<len; i++)
printf(" %d",pk[i].num);
printf("\n");
}
int main()
{
int i,j,k;
while(gets(a[0]))
{
if(a[0][0]=='#')break;
gets(a[1]);
strcpy(p,a[0]);
strcat(p,a[1]);
for(i=0,j=0; i<strlen(p); i++)
if(isalpha(p[i])||isdigit(p[i]))
p[j++]=p[i];
p[j]='\0';
for(i=0,j=0; i<strlen(p); i+=2)
{
pk[j].num=1;
pk[j].size[0]=p[i];
pk[j++].suit[0]=p[i+1];
}
judge();
memset(a,0,sizeof(a));
memset(pk,0,sizeof(pk));
memset(p,0,sizeof(p));
}
return 0;
}
#include<string.h>
#include<stdlib.h>
char a[2][100];
char p[300];
struct data
{
char suit[52];
char size[52];
int num;
} pk[55];
int top[52];
int three(int i,int len)
{
int j;
top[i-3]++;
pk[i-3].num+=pk[i].num;
pk[i-3].size[top[i-3]]=pk[i].size[top[i]];
pk[i-3].suit[top[i-3]]=pk[i].suit[top[i]];
//pk[i].suit[top[i]]=pk[i].suit[top[i-1]];
//pk[i].size[top[i]]=pk[i].size[top[i-1]];
top[i]--;
if(top[i]<0){
for(j=i; j<len; j++)
{
pk[j].num=pk[j+1].num;
pk[j].size[top[j]]=pk[j+1].size[top[j]];
pk[j].suit[top[j]]=pk[j+1].suit[top[j]];
}
pk[len].size[top[j]]='\0';
pk[len].suit[top[j]]='\0';
pk[j].num='\0';}
}
int one(int i,int len)
{
int j;
top[i-1]++;
pk[i-1].num+=pk[i].num;
pk[i-1].size[top[i]]=pk[i].size[top[i]];
pk[i-1].suit[top[i]]=pk[i].suit[top[i]];
//pk[i].suit[top[i]]=pk[i].suit[top[i-1]];
//pk[i].size[top[i]]=pk[i].size[top[i-1]];
top[i]--;
if(top[i]<0)
{for(j=i; j<len; j++)
{
pk[j].num=pk[j+1].num;
pk[j].size[top[j]]=pk[j+1].size[top[j]];
pk[j].suit[top[j]]=pk[j+1].suit[top[j]];
}
pk[j].size[top[j]]='\0';
pk[j].suit[top[j]]='\0';
pk[j].num='\0';}
}
int judge()
{
int i,j,k,len=52,len1=52;
for(i=0; i<len; i++)
top[i]=0;
for(i=0; i<len; i++)
{
if(i>2&&pk[i].suit==pk[i-3].suit||pk[i].size==pk[i-3].size)
{
len--;
three(i,len);
i=0;
}
if(i>0&&(pk[i].suit==pk[i-1].suit||pk[i].size==pk[i-1].size))
{
len--;
one(i,len);
i=0;
}
}
//for(i=0; i<len; i++)
//printf("%c%c,",pk[i].size,pk[i].suit);
if(len!=1)
printf("%d piles remaining:",len);
else
printf("%d pile remaining:",len);
for(i=0; i<len; i++)
printf(" %d",pk[i].num);
printf("\n");
}
int main()
{
int i,j,k;
while(gets(a[0]))
{
if(a[0][0]=='#')break;
gets(a[1]);
strcpy(p,a[0]);
strcat(p,a[1]);
for(i=0,j=0; i<strlen(p); i++)
if(isalpha(p[i])||isdigit(p[i]))
p[j++]=p[i];
p[j]='\0';
for(i=0,j=0; i<strlen(p); i+=2)
{
pk[j].num=1;
pk[j].size[0]=p[i];
pk[j++].suit[0]=p[i+1];
}
judge();
memset(a,0,sizeof(a));
memset(pk,0,sizeof(pk));
memset(p,0,sizeof(p));
}
return 0;
}