Fundamentals Of Error Correcting Codes