#include
using namespace std;
/*除去雀头后的12张牌能否组成4个顺子或刻子*/
bool IsOk(vector
int sz = num.size();
if(sz == 3){
if((num[0]==num[1] && num[0]==num[2]) || (num[0]+1==num[1] && num[0]+2==num[2]))
return true;
return false;
}
sort(num.begin(),num.end());
int cnt = count(num.begin(),num.end(),num[0]);
int p = -1,q=-1;
for(auto i = 1;i < sz;++i){
if(num[i] == num[0] + 1)
p = i;
if(num[i] == num[0] + 2)
q = i;
}
if(cnt > 2){
vector
copy(num.begin()+3,num.end(),tmp1.begin());
if(p!=-1 && q != -1){
vector
copy(num.begin(),num.end(),tmp2.begin());
tmp2.erase(tmp2.begin());
tmp2.erase(tmp2.begin() + p - 1);
tmp2.erase(tmp2.begin() + q - 2);
return IsOk(tmp1) || IsOk(tmp2);
}
return IsOk(tmp1);
}
else{
if(p != -1 && q != -1){
vector
copy(num.begin(),num.end(),tmp3.begin());
tmp3.erase(tmp3.begin());
tmp3.erase(tmp3.begin() + p - 1);
tmp3.erase(tmp3.begin() + q - 2);
return IsOk(tmp3);
}
return false;
}
}
void remove_by_val(vector
int p = -1;
sort(num.begin(),num.end());
for(auto i = 0;i < num.size();++i){
if(num[i] == val){
p = i;
break;
}
}
num.erase(num.begin() + p,num.begin() + p + cnt);
}
void func(vector
for(auto i = 1;i < 10;++i){
if(count(num.begin(),num.end(),i) > 3)
continue;
num[13] = i;
sort(num.begin(),num.end());
map
for(auto elem:num)
cnt[elem] += 1;
for(auto it = cnt.begin();it != cnt.end();++it){
if(it->second > 1){
vector
copy(num.begin(),num.end(),tmp.begin());
remove_by_val(tmp,it->first,2);
if(IsOk(tmp)){
ret.push_back(i);
break;
}
}
}
for(auto j = 0;j < 14;++j){
if(num[j] == i){
swap(num[j],num[13]);
break;
}
}
}
}
int main(){
vector
for(auto i = 0;i<13;++i)
cin >> num[i];
vector
func(num,ret);
if(ret.empty())
cout<<0< else{ for(auto i = 0 ;i < ret.size() - 1;++i) cout< cout< } return 0; }