#include <cstdio>
#include <string>
#include <stack>
#include <vector>
using namespace::std;
int main()
{
char str[3];
vector<stack<string> > cards;
while(scanf("%s",str))
{
if(str[0]=='#') break;
cards.clear();
stack<string> card;
card.push(str);
cards.push_back(card);
for(int n=1;n<52;n++)
{
scanf("%s",str);
card.pop();
card.push(str);
cards.push_back(card);
}
int i=0;
while(1)
{
for(i=0;i<cards.size();i++)
{
if(i>=3 && (cards[i].top()[0]==cards[i-3].top()[0] || cards[i].top()[1]==cards[i-3].top()[1]))
{
cards[i-3].push(cards[i].top());
cards[i].pop();
break;
}
if(i>=1 && (cards[i].top()[0]==cards[i-1].top()[0] || cards[i].top()[1]==cards[i-1].top()[1]))
{
cards[i-1].push(cards[i].top());
cards[i].pop();
break;
}
}
if(i==cards.size())
break;
if(cards[i].empty())
{
cards.erase(cards.begin()+i);
}
}
if(cards.size()==1) printf("1 pile remaining: 52\n");
else
{
printf("%d piles remaining:",cards.size());
for(int j=0;j<cards.size();j++)
printf(" %d",cards[j].size());
printf("\n");
}
}
return 0;
}
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=63