reeds-sloane algorithm