//用了三小时AC的还是很激动的!!
#include <cstdio> #include <cstring> #include <stack> using namespace std; stack <int> piles[55]; int order[55]; int cnt; void Init() { cnt = 52; for (int i = 0;i < 52;i++) { while (!piles[i].empty()) piles[i].pop(); order[i] = i; } } bool match(int a, int b) { return (a % 14 == b % 14) || (a / 14 == b / 14); } int search(int src) { int dst = src; while (1) { if (dst - 3 >= 0 && match(piles[order[dst - 3]].top(), piles[order[src]].top())) { dst = dst - 3;continue; } if (dst - 1 >= 0 && match(piles[order[dst - 1]].top(), piles[order[src]].top())) { dst = dst - 1;continue; } return dst; } } char s[100], s1[100]; bool read() { fgets(s, 95, stdin); if (s[0] == '#')return false; fgets(s1, 95, stdin); return true; } void trans(char *s, int piles_start) { int len = strlen(s); for (int i = 0;i<len;i += 3)//每行最后一张牌+2后直接跳过了换行符 { int t = 0; switch (s[i]) { case 'A':t += 1;break; case 'T':t += 10;break; case 'J':t += 11;break; case 'Q':t += 12;break; case 'K':t += 13;break; default:t += s[i] - '0';break; } switch (s[i + 1]) { case 'D':t += 14 * 1;break; case 'H':t += 14 * 2;break; case 'S':t += 14 * 3;break; default:break;//'C' } piles[i / 3 + piles_start].push(t);//i步长为2-- } } void transfer() { trans(s, 0); trans(s1, 26); } void output() { printf("%d %s remaining:", cnt, cnt == 1 ? "pile" : "piles"); for (int i = 0;i < cnt;i++) printf(" %d", piles[order[i]].size()); printf(" "); } void solve(int src,int dst)//src,dst为order下标 { int s = order[src], d = order[dst]; if (!piles[s].empty()) { int t = piles[s].top();piles[s].pop(); piles[d].push(t); } if (piles[s].empty()) { cnt--; for (int j = src;j < cnt;j++) order[j] = order[j + 1]; } } void Solve() { for (int i = 1;i < cnt;i++) { int ret = search(i); if (ret != i) { solve(i, ret); i = ret; } } } int main(void) { while (read()) { Init(); transfer(); Solve(); output(); } return 0; }