#include <random>
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
mt19937 engine; //mersenne twister
unsigned int one_of_n(unsigned int n) {
unsigned int choice;
for(unsigned int i = 0; i < n; ++i) {
uniform_int_distribution<unsigned int> distribution(0, i);
if(!distribution(engine))
choice = i;
}
return choice;
}
int main() {
engine = mt19937(random_device()()); //seed random generator from system
unsigned int results[10] = {0};
for(unsigned int i = 0; i < 1000000; ++i)
results[one_of_n(10)]++;
ostream_iterator<unsigned int> out_it(cout, " ");
copy(results, results+10, out_it);
cout << '\n';
}
I2luY2x1ZGUgPHJhbmRvbT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKbXQxOTkzNyBlbmdpbmU7IC8vbWVyc2VubmUgdHdpc3RlcgogCnVuc2lnbmVkIGludCBvbmVfb2Zfbih1bnNpZ25lZCBpbnQgbikgewoJdW5zaWduZWQgaW50IGNob2ljZTsKCWZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKCQl1bmlmb3JtX2ludF9kaXN0cmlidXRpb248dW5zaWduZWQgaW50PiBkaXN0cmlidXRpb24oMCwgaSk7CgkJaWYoIWRpc3RyaWJ1dGlvbihlbmdpbmUpKQoJCQljaG9pY2UgPSBpOwoJfQoJcmV0dXJuIGNob2ljZTsKfQogCmludCBtYWluKCkgewoJZW5naW5lID0gbXQxOTkzNyhyYW5kb21fZGV2aWNlKCkoKSk7IC8vc2VlZCByYW5kb20gZ2VuZXJhdG9yIGZyb20gc3lzdGVtCgl1bnNpZ25lZCBpbnQgcmVzdWx0c1sxMF0gPSB7MH07Cglmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKQoJCXJlc3VsdHNbb25lX29mX24oMTApXSsrOwoJb3N0cmVhbV9pdGVyYXRvcjx1bnNpZ25lZCBpbnQ+IG91dF9pdChjb3V0LCAiICIpOwoJY29weShyZXN1bHRzLCByZXN1bHRzKzEwLCBvdXRfaXQpOwoJY291dCA8PCAnXG4nOwp9