reduction algorithm