basic algorithm description