#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
struct pile{
char a[2];
pile *pnext;
}*phead,pold,*pnewn,*pcheck1;
struct list{
char a[2];
int count;
list *lnext;
list *lprev;
pile *pilehead;}*lhead,*lold,*lnewn,*lcheck1;
int mainlogic(){
int i,j=0;
list *lcheck=lhead->lnext,*temp;
while(lcheck->lnext){
if(j>2){
lcheck1=lcheck;
for(i=0;i<3;i++)
lcheck1=lcheck1->lprev;
if(!lcheck1->pilehead)
{ if(lcheck->a[0]==lcheck1->a[0] || lcheck->a[1]==lcheck1->a[1])
{
lcheck1->count++;
pnewn=new pile;
strcpy(pnewn->a,lcheck->a);
pnewn->pnext=NULL;
temp=lcheck->lprev;
temp->lnext=lcheck->lnext;
(lcheck->lnext)->lprev=temp;
delete lcheck;
lcheck1->pilehead=pnewn;
mainlogic();
}
}
else{
pile *pcheck=lcheck1->pilehead;
while(pcheck->pnext!=NULL)
pcheck=pcheck->pnext;
if(pcheck->a[0]==lcheck->a[0] || pcheck->a[1]==lcheck->a[1]){
lcheck1->count++;
pnewn=new pile;
strcpy(pnewn->a,lcheck->a);
pnewn->pnext=NULL;
pcheck->pnext=pnewn;
temp=lcheck->lprev;
temp->lnext=lcheck->lnext;
(lcheck->lnext)->lprev=temp;
delete lcheck;
mainlogic();
}
}
}
if(j>0){
lcheck1=lcheck;
lcheck1=lcheck1->lprev;
if(!lcheck1->pilehead)
{ if(lcheck->a[0]==lcheck1->a[0] || lcheck->a[1]==lcheck1->a[1])
{
lcheck1->count++;
pnewn=new pile;
strcpy(pnewn->a,lcheck->a);
pnewn->pnext=NULL;
lcheck1->pilehead=pnewn;
temp=lcheck->lprev;
temp->lnext=lcheck->lnext;
(lcheck->lnext)->lprev=temp;
delete lcheck;
mainlogic();
}
}
else{
pile *pcheck=lcheck1->pilehead;
while(pcheck->pnext!=NULL)
pcheck=pcheck->pnext;
if(pcheck->a[0]==lcheck->a[0] || pcheck->a[1]==lcheck->a[1]){
lcheck1->count++;
pnewn=new pile;
strcpy(pnewn->a,lcheck->a);
pnewn->pnext=NULL;
pcheck->pnext=pnewn;
temp=lcheck->lprev;
temp->lnext=lcheck->lnext;
(lcheck->lnext)->lprev=temp;
delete lcheck;
mainlogic();
}
}
}
lcheck=lcheck->lnext;
j++;}
}
int main(){
int n,c;
lhead=new list;
cin>>lhead->a;
while(lhead->a[0]!='#')
{cin.ignore();
lhead->count=1;
lhead->pilehead=NULL;
lhead->lnext=NULL;
lold=lhead;
lold->lprev=NULL;
c=n=0;
while(c!=51)
{
lnewn = new list;
cin>>lnewn->a;
lold->lnext=lnewn;
lnewn->count=1;
lnewn->lnext=NULL;
lnewn->pilehead=NULL;
lnewn->lprev=lold;
lold=lnewn;
c++; }
mainlogic();
lold=lhead;
while(lold->lnext!=NULL)
{
n++;
lold=lold->lnext;
}
cout<<n<<" piles remaining: ";
lold=lhead;
while(lold->lnext!=NULL)
{
cout<<lold->count<<" ";
}
cout<<endl;
cin>>lhead->a;
}
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0ZGlvLmg+CiNpbmNsdWRlPHN0cmluZy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCnN0cnVjdCBwaWxlewoJICAgY2hhciBhWzJdOwogICAgICBwaWxlICpwbmV4dDsKICAgICAgCSAgICB9KnBoZWFkLHBvbGQsKnBuZXduLCpwY2hlY2sxOwpzdHJ1Y3QgbGlzdHsKCSAgIGNoYXIgYVsyXTsKICAgICAgaW50IGNvdW50OwogICAgICBsaXN0ICpsbmV4dDsKICAgICAgbGlzdCAqbHByZXY7CiAgICAgIHBpbGUgKnBpbGVoZWFkO30qbGhlYWQsKmxvbGQsKmxuZXduLCpsY2hlY2sxOwoKaW50IG1haW5sb2dpYygpewoJaW50IGksaj0wOwoJCmxpc3QgKmxjaGVjaz1saGVhZC0+bG5leHQsKnRlbXA7Cgp3aGlsZShsY2hlY2stPmxuZXh0KXsKaWYoaj4yKXsKCWxjaGVjazE9bGNoZWNrOwoJZm9yKGk9MDtpPDM7aSsrKQoJbGNoZWNrMT1sY2hlY2sxLT5scHJldjsKCQoJIGlmKCFsY2hlY2sxLT5waWxlaGVhZCkgCiAgICAgICAgeyBpZihsY2hlY2stPmFbMF09PWxjaGVjazEtPmFbMF0gfHwgbGNoZWNrLT5hWzFdPT1sY2hlY2sxLT5hWzFdKQkKCQkgICAgewoJCQkgbGNoZWNrMS0+Y291bnQrKzsKCQkJIHBuZXduPW5ldyBwaWxlOwoJCQkgc3RyY3B5KHBuZXduLT5hLGxjaGVjay0+YSk7CgkJCSBwbmV3bi0+cG5leHQ9TlVMTDsKCQkJIHRlbXA9bGNoZWNrLT5scHJldjsKCQkJIHRlbXAtPmxuZXh0PWxjaGVjay0+bG5leHQ7CgkJCSAobGNoZWNrLT5sbmV4dCktPmxwcmV2PXRlbXA7CgkJCSBkZWxldGUgbGNoZWNrOwoJCQkgbGNoZWNrMS0+cGlsZWhlYWQ9cG5ld247CgkJCSAgbWFpbmxvZ2ljKCk7CgkKCQkJIH0KCQkJIAoJCX0KCQllbHNlewoJCXBpbGUgKnBjaGVjaz1sY2hlY2sxLT5waWxlaGVhZDsKCQl3aGlsZShwY2hlY2stPnBuZXh0IT1OVUxMKQoJCQlwY2hlY2s9cGNoZWNrLT5wbmV4dDsKCQkJaWYocGNoZWNrLT5hWzBdPT1sY2hlY2stPmFbMF0gfHwgcGNoZWNrLT5hWzFdPT1sY2hlY2stPmFbMV0pewoJCQkJCWxjaGVjazEtPmNvdW50Kys7CgkJCQkJIHBuZXduPW5ldyBwaWxlOwoJCQkgICAJCSBzdHJjcHkocG5ld24tPmEsbGNoZWNrLT5hKTsKCQkJIAkJIHBuZXduLT5wbmV4dD1OVUxMOwoJCQkgIAkJIHBjaGVjay0+cG5leHQ9cG5ld247CgkJCSAJCSB0ZW1wPWxjaGVjay0+bHByZXY7CgkJCQkJIHRlbXAtPmxuZXh0PWxjaGVjay0+bG5leHQ7CgkJCQkJIChsY2hlY2stPmxuZXh0KS0+bHByZXY9dGVtcDsKCQkJCQkgZGVsZXRlIGxjaGVjazsKCQkJCQkgbWFpbmxvZ2ljKCk7CgkJCSAJCQoJCQkgCX0KCQkJIH0KCX0KCWlmKGo+MCl7CgkJbGNoZWNrMT1sY2hlY2s7CgoJbGNoZWNrMT1sY2hlY2sxLT5scHJldjsKCQoJIGlmKCFsY2hlY2sxLT5waWxlaGVhZCkgCiAgICAgICAgeyBpZihsY2hlY2stPmFbMF09PWxjaGVjazEtPmFbMF0gfHwgbGNoZWNrLT5hWzFdPT1sY2hlY2sxLT5hWzFdKQkKCQkgICAgewoJCQkgbGNoZWNrMS0+Y291bnQrKzsKCQkJIHBuZXduPW5ldyBwaWxlOwoJCQkgc3RyY3B5KHBuZXduLT5hLGxjaGVjay0+YSk7CgkJCSBwbmV3bi0+cG5leHQ9TlVMTDsKCQkJIGxjaGVjazEtPnBpbGVoZWFkPXBuZXduOwoJCQkgdGVtcD1sY2hlY2stPmxwcmV2OwoJCQkgdGVtcC0+bG5leHQ9bGNoZWNrLT5sbmV4dDsKCQkJIChsY2hlY2stPmxuZXh0KS0+bHByZXY9dGVtcDsKCQkJIGRlbGV0ZSBsY2hlY2s7CgkJCSBtYWlubG9naWMoKTsKCQkJIH0KCQkJIAoJCQkgfQoJCWVsc2V7CgkJcGlsZSAqcGNoZWNrPWxjaGVjazEtPnBpbGVoZWFkOwoJCXdoaWxlKHBjaGVjay0+cG5leHQhPU5VTEwpCgkJCXBjaGVjaz1wY2hlY2stPnBuZXh0OwoJCQlpZihwY2hlY2stPmFbMF09PWxjaGVjay0+YVswXSB8fCBwY2hlY2stPmFbMV09PWxjaGVjay0+YVsxXSl7CgkJCQkJbGNoZWNrMS0+Y291bnQrKzsKCQkJCQkgcG5ld249bmV3IHBpbGU7CgkJCSAgIAkJIHN0cmNweShwbmV3bi0+YSxsY2hlY2stPmEpOwoJCQkgCQkgcG5ld24tPnBuZXh0PU5VTEw7CgkJCSAgCQkgcGNoZWNrLT5wbmV4dD1wbmV3bjsKCQkJIAkJIHRlbXA9bGNoZWNrLT5scHJldjsKCQkJCQkgdGVtcC0+bG5leHQ9bGNoZWNrLT5sbmV4dDsKCQkJCQkgKGxjaGVjay0+bG5leHQpLT5scHJldj10ZW1wOwoJCQkJCSAgZGVsZXRlIGxjaGVjazsKCQkJCQkgIG1haW5sb2dpYygpOwoJCQkgCgkJCSAJfQoJCQkgCX0KCX0KCQkJCSAKCWxjaGVjaz1sY2hlY2stPmxuZXh0OwoJaisrO30KCQp9CgppbnQgbWFpbigpewoJaW50IG4sYzsKCWxoZWFkPW5ldyBsaXN0OwoKY2luPj5saGVhZC0+YTsKIAogd2hpbGUobGhlYWQtPmFbMF0hPScjJykKIHtjaW4uaWdub3JlKCk7CiAgbGhlYWQtPmNvdW50PTE7CiAgbGhlYWQtPnBpbGVoZWFkPU5VTEw7CiAgbGhlYWQtPmxuZXh0PU5VTEw7CiAgbG9sZD1saGVhZDsKICBsb2xkLT5scHJldj1OVUxMOwogIGM9bj0wOwogIHdoaWxlKGMhPTUxKQogIHsKICBsbmV3biA9IG5ldyBsaXN0OwogIGNpbj4+bG5ld24tPmE7CiAgbG9sZC0+bG5leHQ9bG5ld247CiAgbG5ld24tPmNvdW50PTE7CiAgbG5ld24tPmxuZXh0PU5VTEw7CiAgbG5ld24tPnBpbGVoZWFkPU5VTEw7CiAgbG5ld24tPmxwcmV2PWxvbGQ7CiAgbG9sZD1sbmV3bjsKICBjKys7CX0KICAKICBtYWlubG9naWMoKTsKCQogIGxvbGQ9bGhlYWQ7CiAgd2hpbGUobG9sZC0+bG5leHQhPU5VTEwpCiAgeyAgIAoJbisrOwoJbG9sZD1sb2xkLT5sbmV4dDsKCSAgfQpjb3V0PDxuPDwiIHBpbGVzIHJlbWFpbmluZzogIjsKbG9sZD1saGVhZDsKd2hpbGUobG9sZC0+bG5leHQhPU5VTEwpCnsKCWNvdXQ8PGxvbGQtPmNvdW50PDwiICI7Cn0KY291dDw8ZW5kbDsKCmNpbj4+bGhlYWQtPmE7Cn0KfQkJICAg
UUQgQUQgOEggNVMgM0ggNUggVEMgNEQgSkggS1MgNkggOFMgSlMgQUMgQVMgOEQgMkggUVMgVFMgM1MgQUggNEggVEggVEQgM0MgNlMKOEMgN0QgNEMgNFMgN1MgOUggN0MgNUQgMlMgS0QgMkQgUUggSkQgNkQgOUQgSkMgMkMgS0ggM0QgUUMgNkMgOVMgS0MgN0ggOUMgNUMKQUMgMkMgM0MgNEMgNUMgNkMgN0MgOEMgOUMgVEMgSkMgUUMgS0MgQUQgMkQgM0QgNEQgNUQgNkQgN0QgOEQgVEQgOUQgSkQgUUQgS0QKQUggMkggM0ggNEggNUggNkggN0ggOEggOUggS0ggNlMgUUggVEggQVMgMlMgM1MgNFMgNVMgSkggN1MgOFMgOVMgVFMgSlMgUVMgS1MKIw==
QD AD 8H 5S 3H 5H TC 4D JH KS 6H 8S JS AC AS 8D 2H QS TS 3S AH 4H TH TD 3C 6S
8C 7D 4C 4S 7S 9H 7C 5D 2S KD 2D QH JD 6D 9D JC 2C KH 3D QC 6C 9S KC 7H 9C 5C
AC 2C 3C 4C 5C 6C 7C 8C 9C TC JC QC KC AD 2D 3D 4D 5D 6D 7D 8D TD 9D JD QD KD
AH 2H 3H 4H 5H 6H 7H 8H 9H KH 6S QH TH AS 2S 3S 4S 5S JH 7S 8S 9S TS JS QS KS
#