<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def register(self, extension, extension_name):
 """ Register an extension into the Nautilus Router :param extension: Extension :param extension_name: Name of the Extension :return: """

        self._extensions[extension_name] = extension
        self.ROUTES.extend([
            tuple(list(t) + [extension_name])
            for t in extension.ROUTES
        ])
        self.CACHED.extend([
            (f_name, extension_name)
            for f_name in extension.CACHED
        ])

        # This order allows for user defaults to overwrite extension ones
        self.Access_Control_Allow_Methods.update({
            k: v
            for k, v in extension.Access_Control_Allow_Methods.items()
            if k not in self.Access_Control_Allow_Methods
        })