pushing algorithms