A data allocator allocates (N.times.kV.times.kH)-byte source data
distributively in N (kV bytes.times.kH bytes) tw0-dimensional arrays and
sends the data to a V coder and an H coder. The V coder codes each column
of the tow-dimensional arrays according to an (nV, kV) code V, and the H
coder codes each row of the two-dimensional arrays according to an (nH,
kH) code H. The V and H coders send redundant data to a data allocator.
The data allocator allocates the redundant data in a memory to obtain N
(nV bytes.times.nH bytes) product-code codewords and outpouts each row of
the product-code codewords in an alternating manner for the N
product-code codewords.