algorithm 509 101 878 553 text 118 108 485 1276 text 510 588 878 1276