Coздайте копию входного списка прежде чем его подавать на вход program_solver(), ибо эта функция модифицирует входной список и ошибку "index out of range" немудрено будет получить на втором и последующих прогонах program_solver().
> inputlist[0] = source_code
в первом задании непонятно, зачем вы восстанавливаете старое значение первого элемента списка