CSI227 Algorithm