1. A method for encoding data for storage in multilevel memory cells having q cell-levels, the method comprising: encoding data words into respective codewords, wherein each codeword has N symbols, wherein each symbol has at least one q symbol-value, and wherein a q symbol-value relates to a cell-level; adapting an encoding scheme, wherein one or more codewords have unequal q symbol-value multiplicities, wherein a multiplicity is a number of times the q symbol-value appears in a codeword, wherein different multiplicities are enforced based on a length of N symbols, wherein the multiplicity of each q symbol-value in every codeword has a multiplicity constraint μ, wherein μ is a predetermined number, wherein μ≧2 , wherein the encoding scheme ensures that each q symbol-value occurs no less than μ times in every codeword, and wherein enforcing the multiplicity constraint implements a weakly-balanced code output; sending the weakly-balanced code output from a modulation encoder; and supplying the N symbols of each codeword for storage in respective multilevel memory cells.