405c01816ac259886b4b83665bc4211d algorithms_a2012v5p30.pdf