mersenne twister algorithm explained