1. A method for detecting N-symbol codewords, each N-symbol codeword being a permutation of one of a predefined plurality of N-symbol initial vectors having symbols that are ordered according to a symbol value, wherein the symbols of each codeword have one of q symbol values and are stored in respective q-level memory cells where q>2, the method comprising: reading the q-level memory cells to obtain a read signal having N signal components corresponding to respective symbols of the codeword; detecting the memory cell level which most-closely corresponds to each read signal component according to a first correspondence criterion dependent on reference signal levels for the q cell levels; identifying unreliable read signal components dependent on a reliability indicator for each read signal component, wherein the reliability indicator is dependent on proximity of the read signal component to the reference signal level for the most-closely corresponding memory cell level; additionally detecting, for each unreliable read signal component, the next-most-closely corresponding memory cell level according to the first correspondence criterion; defining, for each read signal, a set of ordered codeword vectors each having N symbols corresponding to respective components of the read signal ordered according to a signal level, wherein the symbol values in each ordered codeword vector correspond to one possible combination of the detected memory cell levels for the read signal components; defining, for each read signal, a set of candidate initial vectors having intersection of the set of ordered codeword vectors for that read signal and the predefined plurality of N-symbol initial vectors; and detecting, if the set of candidate initial vectors for the read signal contains at least one vector, the codeword corresponding to that read signal that is dependent on the set of candidate initial vectors.