Art of constructing low-complexity encoders/decoders for constrained block codes