With the advent of new and advanced programming languages, it becomes imperative to migrate legacy software to new programming languages. Unsupervised Machine Learning based Program Translation could play an essential role in such migration, even without a sufficiently sizeable reliable corpus of parallel source code. However, due to the statistical nature of such translators, they are far from perfect. This work investigates unsupervised program translators and where and why they fail. With in-depth error analysis of such failures, we identify that the cases where such translators fail are very repetitive i.e., follow few particular patterns. With this insight, we develop a rule-based program mutation engine, which pre-processes the input code if it follows specific patterns and post-process the output if it follows a few other patterns we observed. We show that our code processing tool, in conjunction with the program translator, can form a hybrid program translator and can significantly improve the state-of-the-art. In the future, we envision an end-to-end program translation tool where programming domain knowledge can be embedded into an ML-based translation pipeline using pre- and post-processing steps.