La parte que buscas está al final del código donde hay un printf seguido de un c[i] algo, como te comenté al final en este tipo de cifrado la gente suele deshacerse del módulo negativo y usa las propiedades de los módulos para convertirlo a positivo, lo cual pasa en este caso.
Encontré un ejemplo más acorde a lo que buscas. En el mismo cifrado Hill hay dos procesos, cuando cifras el contenido y cuando lo descifras, en ambos casos usas una "matriz de transformación". Lo relevante del asunto es que en el descifrado hay más oportunidades de que veas los módulos negativos.
Dado que en el primer código que te adjunté sólo está implementada la parte del cifrado, aquí te adjunto otra implementación de la técnica de Hill donde se abarcan tanto el cifrado como el descifrado:
http://www.sanfoundry.com/java-program-implement-hill-cypher/
En la línea 203 encontrarás la forma en la que se opera con los módulos.
Para que entiendas bien qué se está haciendo en la línea 203, te adjunto una explicación del descifrado de la técnica de Hill:
http://crypto.interactive-maths.com/hill-cipher.html#inverse
En particular verifica la sección "Decrypt", ahí notarás que se manejan los módulos negativos y entonces podrás entender la sección de código.
Por ello es que te recomiendo que veas primero la explicación y después la implementación.
Quedo al pendiente.
Saludos.