显示原始代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
bool tsumo(vector<ll> &cur, ll a, ll b) {
if (a == 4 && b == 1) {
return true;
}
bool ans = 0;
ll i, k;
for (k = 0; k < 3; ++k) {
for (i = 0; i < 9; ++i) {
if (i < 7 && cur[9 * k + i] && cur[9 * k + i + 1] && cur[9 * k + i + 2]) {
++a;
--cur[9 * k + i];
--cur[9 * k + i + 1];
--cur[9 * k + i + 2];
ans |= tsumo(cur, a, b);
++cur[9 * k + i];
++cur[9 * k + i + 1];
++cur[9 * k + i + 2];
--a;
}
if (ans) {
return ans;
}
if (cur[9 * k + i] > 2) {
++a;
cur[9 * k + i] -= 3;
ans |= tsumo(cur, a, b);
cur[9 * k + i] += 3;
--a;
}
if (ans) {
return ans;
}
if (cur[9 * k + i] > 1 && !b) {
++b;
cur[9 * k + i] -= 2;
ans |= tsumo(cur, a, b);
cur[9 * k + i] += 2;
--b;
}
if (ans) {
return ans;
}
}
}
for (i = 0; i < 7; ++i) {
if (cur[9 * k + i] > 2) {
++a;
cur[9 * k + i] -= 3;
ans |= tsumo(cur, a, b);
cur[9 * k + i] += 3;
--a;
}
if (ans) {
return ans;
}
if (cur[9 * k + i] > 1 && !b) {
++b;
cur[9 * k + i] -= 2;
ans |= tsumo(cur, a, b);
cur[9 * k + i] += 2;
--b;
}
if (ans) {
return ans;
}
}
return 0;
}
int main() {
ll t;
cin >> t;
while (t--) {
vector<ll> cur(34, 0);
ll i, j;
string s;
cin >> s;
for (i = 0; i < 28; i += 2) {
ll index = s[i] - '1';
if (s[i + 1] == 's') {
index += 9;
}
if (s[i + 1] == 'p') {
index += 18;
}
if (s[i + 1] == 'z') {
index += 27;
}
++cur[index];
}
if (tsumo(cur, 0, 0)) {
cout << "Tsumo!" << endl;
} else {
vector<vector<ll>> total;
for (i = 0; i < 34; ++i) {
if (!cur[i]) {
continue;
}
--cur[i];
vector<ll> tmp = { i };
for (j = 0; j < 34; ++j) {
if (j == i) {
continue;
}
++cur[j];
if (tsumo(cur, 0, 0)) {
tmp.push_back(j);
}
--cur[j];
}
++cur[i];
if (tmp.size() > 1) {
total.push_back(tmp);
}
}
cout << total.size();
cout << endl;
sort(total.begin(), total.end(),
[](const vector<ll> &a, const vector<ll> &b) { return a[0] < b[0]; });
for (auto &&row : total) {
for (auto &&ele : row) {
if (ele < 9) {
cout << ele + 1;
cout << 'm';
} else {
if (ele < 18) {
cout << ele - 8;
cout << 's';
} else {
if (ele < 27) {
cout << ele - 17;
cout << 'p';
} else {
cout << ele - 26;
cout << 'z';
}
}
}
cout << ' ';
}
cout << endl;
}
}
}
return 0;
}