complete but slow