To store a plurality of input bits, the bits are mapped to a corresponding
programmed state of one or more memory cells and the cell(s) is/are
programmed to that corresponding programmed state. The mapping may be
many-to-one or may be an "into" generalized Gray mapping. The cell(s)
is/are read to provide a read state value that is transformed into a
plurality of output bits, for example by maximum likelihood decoding or
by mapping the read state value into a plurality of soft bits and then
decoding the soft bits.