maximum likelihood decoding of linear block codes