dp, lefist (not done yet)