Requirements
Small memory cost.
Small input and output.
Long time.