#include #include #include #include using namespace std; class fa{ public: long double perms; int value; fa * left; fa* right; int elems; }; /* class holder{ public: fa * root; };*/ void makefactorial(vector& fack){ fack.push_back(1); for(int i=1;i<101;++i){ fack.push_back(fack.at(i-1)*i); } }; fa* insert(int elem, fa* tree){ if(!tree){ fa* ujfa = new fa; ujfa->left = NULL; ujfa->right = NULL; ujfa->value = elem; ujfa->elems = 0; ujfa->perms = 0; return ujfa; }else{ if(elemvalue){ tree->left = insert(elem,tree->left); }else{ tree->right = insert(elem,tree->right); }; return tree; } } long double value(fa* tree,vector& factorial){ if(tree->left == NULL && tree->right == NULL){ tree->elems = 1; // cout << "elem " << tree->value << " elesm " << tree->elems << endl; return 1; }else{ if(tree->left == NULL || tree->right == NULL){ fa* alfa = (tree->left == NULL ? tree->right : tree->left); long double ize = value(alfa,factorial); tree->elems = alfa->elems + 1; // cout << "elem " << tree->value << " perm " << ize << "alfaelems " << alfa->elems << "elems " << tree->elems << endl; return ize ; //value(alfa,factorial); }else{ long double ize = value(tree->left,factorial) * value(tree->right,factorial) * factorial.at(tree->left->elems + tree->right->elems) / factorial.at(tree->left->elems) / factorial.at(tree->right->elems); tree->elems = tree->left->elems + tree->right->elems +1; // cout << "elem " << tree->value << " perm " <left->elems << " rightelems " << tree->right->elems << " asd " << factorial.at(tree->left->elems + tree->right->elems) << " " << factorial.at(tree->left->elems) << " " << factorial.at(tree->right->elems) << " ize" << " elems " << tree->elems << endl; return ize; } } }; int main(){ int num; int elem; cin >> num; fa* tree = NULL; vector factorial; makefactorial(factorial); while(num){ for (int i=0;i> elem; tree = insert(elem,tree); } //printf("%i\n",value(tree, factorial)); cout.precision( 32 ); cout << value(tree,factorial) << endl; cin >> num; } return 0; }