<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def recover_specific_version(self, pointer_on_version_to_recover):
 """ Recovers a specific version of the all_time_history element by doing several undos and redos. :param pointer_on_version_to_recover: the id of the list element which is to recover :return: """

        # search for traceable path -> list of action to undo and list of action to redo
        logger.info("Going to history status #{0}".format(pointer_on_version_to_recover))
        undo_redo_list = self.modifications.get_undo_redo_list_from_active_trail_history_item_to_version_id(pointer_on_version_to_recover)
        logger.debug("Multiple undo and redo to reach modification history element of version {0} "
                     "-> undo-redo-list is: {1}".format(pointer_on_version_to_recover, undo_redo_list))
        # logger.debug("acquire lock 1 - for multiple action {0}".format(self.modifications.trail_pointer))
        self.state_machine_model.storage_lock.acquire()
        # logger.debug("acquired lock 1 - for multiple action {0}".format(self.modifications.trail_pointer))
        for elem in undo_redo_list:
            if elem[1] == 'undo':
                # do undo
                self._undo(elem[0])
            else:
                # do redo
                self._redo(elem[0])

        self.modifications.reorganize_trail_history_for_version_id(pointer_on_version_to_recover)
        self.change_count += 1
        # logger.debug("release lock 1 - for multiple action {0}".format(self.modifications.trail_pointer))
        self.state_machine_model.storage_lock.release()