<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def nodes(self) -> List[str]: """Return the list of nodes configured in the scenario's yaml. Should the scenario use version 1, we check if there is a 'setting'. If so, we derive the list of nodes from this dictionary, using its 'first', 'last' and 'template' keys. Should any of these keys be missing, we throw an appropriate exception. If the scenario version is not 1, or no 'range' setting exists, we use the 'list' settings key and return the value. Again, should the key be absent, we throw an appropriate error. :raises MissingNodesConfiguration: if the scenario version is 1 and a 'range' key was detected, but any one of the keys 'first', 'last', 'template' are missing; *or* the scenario version is not 1 or the 'range' key and the 'list' are absent. """

        if self._scenario_version == 1 and 'range' in self._config:
            range_config = self._config['range']

            try:
                start, stop = range_config['first'], range_config['last'] + 1
            except KeyError:
                raise MissingNodesConfiguration(
                    'Setting "range" must be a dict containing keys "first" and "last",'
                    ' whose values are integers!',
                )

            try:
                template = range_config['template']
            except KeyError:
                raise MissingNodesConfiguration(
                    'Must specify "template" setting when giving "range" setting.',
                )

            return [template.format(i) for i in range(start, stop)]
        try:
            return self._config['list']
        except KeyError:
            raise MissingNodesConfiguration('Must specify nodes under "list" setting!')