uses markov chain