#include #include #include #define GAMES 1000 using namespace std; int fr[26],ft[26]; int isPoint(int x) { return x==10 || x==14; } int freeCard(int x) { if(fr[7]==4) { --fr[7]; return 7; } if(!x) { for(int i=8; i<=13; ++i) if(i!=10 && fr[i]>ft[i]) { --fr[i]; return i; } if(fr[10]+fr[7]>=ft[10]+ft[7] && fr[10]) { --fr[10]; return 10; } if(fr[14]+fr[7]>=ft[14]+ft[7] && fr[14]) { --fr[14]; return 14; } int mi=(1<<30),c=-1; for(int i=8; i<=13; ++i) if(i!=10 && fr[i] && ft[i]=ft[x]+ft[7]) { if(fr[x]) { --fr[x]; return x; } if(fr[7]) { --fr[7]; return 7; } } if(!isPoint(x) && fr[x] && x!=7) { --fr[x]; return x; } /* if(isPoint(x) && fr[x]+fr[7]<3) { for(int i=8; i<=14; ++i) if(!isPoint(i) && fr[i]) { --fr[i]; return i; } } if(isPoint(x) && ft[x]+ft[7]>fr[x]+fr[7]) { for(int i=8; i<=14; ++i) if(fr[i] && !isPoint(i)) { --fr[i]; return i; } } if(fr[x]) { --fr[x]; return x; } if(isPoint(x) && fr[7] && ft[7]+ft[x]<=fr[x]+fr[7]) { --fr[7]; return 7; } for(int i=8; i<=14; ++i) if(fr[i] && !isPoint(i)) { --fr[i]; return i; }*/ int mi=(1<<30),c=-1; for(int i=8; i<=13; ++i) if(i!=10 && fr[i] && ft[i]=7; --i) if(fr[i]) { --fr[i]; return i; } return -1; } int main() { for(int t=1; t<=GAMES; ++t) { for(int i=7; i<=14; ++i) { ft[i]=4; fr[i]=0; } for(int i=0; i<4; ++i) { int x; assert(cin>>x); ++fr[x]; --ft[x]; } int cp=0,op,inmana=4; while(true) { if(!cp) { assert(cin>>op); do { --ft[op]; int fc=freeCard(op); if(fc>14) abort(); cout<>op); }while(op>4); }else { int fc=freeCard(0); if(fc>14) abort(); cout<>x); --ft[x]; --inmana; int ci=inmana; for(int i=1; i<=ci; ++i) { if((x!=fc && x!=7) || (!fr[fc] && !fr[7])) break; int card=freeCard(fc); if(card>14) abort(); cout<>x); --ft[x]; } cout<<0<>op); } if(op==2) cp=0; else if(op==3) cp=1; else { cp=0; int a,b; assert(cin>>a>>b); break; } int n; assert(cin>>n); inmana+=n; for(int i=1; i<=n; ++i) { int x; assert(cin>>x); ++fr[x]; --ft[x]; } } } }