1. A method for programming memory cells, the method comprising: generating an encoded stream using a data stream, wherein the encoded stream comprises at least three different program states; and using the encoded stream to program the memory cells.