algorithm!!!!!!! abstract!!!