w in use are cyclic codes, including BCH and Reed-Solomon codes (see the Cyclic Codes section) and Turbo and LDPC codes (see the Turbo and LDPC Codes section). Many other linear and nonlinear block codes, some now of mainly historical interest, exist. They include the following: 2-D parity codes. These are created by arranging the message bits on a rectangular array and calculating parity bits for each row and column. Changing any one message bit changes one row parity and one column parity as well (a total of three changes), SO this is a distance-3 code, which can be used for single-error correction or dual-error detection. The decoder forms the row and column parity sums. If all are 0, the codeword is assumed to be correct. If only a row sum or only a column sum is 1, the error is assumed to be in the corresponding parity bit. If one row sum and one column sum are 1, the error is assumed to be in the databit at the intersection of that row and column, which is therefore corrected. If two or more row sums or two or more column sums are 1, a larger number of errors have occurred, which cannot be corrected. Hamming codes. These are also distance-3 linear block codes, but more efficient than 2D parity codes. For binary Hamming codes, the codeword length is given by n = 2r - 1, where r is the number of parity bits; the number of message bits is therefore given by k = n - r. The first four Hamming codes, for example, are (3,1), (7,4), (15,11), and (31,26). Error correction can be achieved by syndrome decoding, as described in the Hard-Decision Decoding of Linear Block Codes section. There are cyclic forms of Hamming code, described in the Cyclic Codes section. Hadamard codes. The codewords are the rows of a Hadamard matrix, which is a binary n matrix (n even) in which each row differs from any other row in exactly n/2 positions; if the matrix elements are denoted +1 and -1, the rows are also orthogonal. Using this matrix and its complement (i.e., the matrix formed by exchanging the +1 and -1 elements), a blocklength-