self loop alg.
add flatten.