this is a package of algorithm