#include class element { public: int value; element *left,*right,*daddy; element() { left=0; right=0; daddy=0; value=0; } }; class tree { public: element *min,*root; int noe; void put(element *w, element *b) { if(w->value>b->value) { if(b->right!=0) put(w,b->right); else { b->right=w; w->daddy=b; } } else { if(b->left!=0) put(w,b->left); else { b->left=w; w->daddy=b; if(min->value>=w->value) min=w; } } } void findMin(element *subtree) { element *horse; horse=subtree; while(horse->left) horse=horse->left; min=horse; } tree() { root=0; noe=0; min=0; } void add(int in) { element *add; add=new element; add->value=in; if(root) { put(add,root); } else { root=add; min=add; } noe++; } void removeMin() { if(noe==1) { root=0; min=0; } else { if(root==min) { root=root->right; findMin(root); } else { if(min->right) { min->daddy->left=min->right; min->right->daddy=min->daddy; findMin(min->right); } else { min->daddy->left=0; min=min->daddy; } } } noe--; } }; void solution(int n) { tree t; int in; for(int i=0;ivalue); t.removeMin(); tb.add(t.min->value); t.removeMin(); } else { tb.add(t.min->value); t.removeMin(); ta.add(t.min->value); t.removeMin(); } i++; } while(ta.noe) { printf("%d-A ",ta.min->value); ta.removeMin(); if(tb.noe) { printf("%d-B ",tb.min->value); tb.removeMin(); } } printf("\n"); } int main() { int n=1; while(n) { scanf("%d",&n); solution(n); } return 0; }