The theory of error-correcting codes☆