An algorithm must satisfy the following properties:

**Input**: The algorithm must have input valuesfrom a speciﬁed set.**Output**: The algorithm must produce the output valuesfrom a speciﬁed set of input values. The output values are the solution to a problem.**Finiteness**: For any input, the algorithm must terminate after a ﬁnite number of steps.**Definiteness**: All steps of the algorithm must be precisely defined.**Effectiveness**: It must be possible to perform each step of the algorithm correctly and in a finite amount of time. That is, its steps must be basic enough so that, for example, someone using a pencil and a paper could carry them out exactly, and in a finite amount of time. It is not enough that each step is definite (or precisely defined), but it must also be feasible.