old_contents: from UserDict import UserDict
  
  class odict(UserDict):
      def __init__(self, dict = None):
          self._keys = []
          UserDict.__init__(self, dict)
  
      def __delitem__(self, key):
          UserDict.__delitem__(self, key)
          self._keys.remove(key)
  
      def __setitem__(self, key, item):
          UserDict.__setitem__(self, key, item)
          if key not in self._keys: self._keys.append(key)
  
      def clear(self):
          UserDict.clear(self)
          self._keys = []
  
      def copy(self):
          dict = UserDict.copy(self)
          dict._keys = self._keys[:]
          return dict
  
      def items(self):
          return zip(self._keys, self.values())
  
      def keys(self):
          return self._keys
  
      def popitem(self):
          try:
              key = self._keys[-1]
          except IndexError:
              raise KeyError('dictionary is empty')
  
          val = self[key]
          del self[key]
  
          return (key, val)
  
      def setdefault(self, key, failobj = None):
          UserDict.setdefault(self, key, failobj)
          if key not in self._keys: self._keys.append(key)
  
      def update(self, dict):
          UserDict.update(self, dict)
          for key in dict.__iter__():
              if key not in self._keys: 
                  self._keys.append(key)
  
      def values(self):
          return map(self.get, self._keys)
  
new_contents: from UserDict import UserDict
  
  class odict(UserDict):
      def __init__(self, dict = None):
          self._keys = []
          UserDict.__init__(self, dict)
  
      def __delitem__(self, key):
          UserDict.__delitem__(self, key)
          self._keys.remove(key)
  
      def __setitem__(self, key, item):
          UserDict.__setitem__(self, key, item)
          if key not in self._keys: self._keys.append(key)
  
      def clear(self):
          UserDict.clear(self)
          self._keys = []
  
      def copy(self):
          dict = UserDict.copy(self)
          dict._keys = self._keys[:]
          return dict
  
      def items(self):
          return zip(self._keys, self.values())
  
      def keys(self):
          return self._keys
  
      def popitem(self):
          try:
              key = self._keys[-1]
          except IndexError:
              raise KeyError('dictionary is empty')
  
          val = self[key]
          del self[key]
  
          return (key, val)
  
      def setdefault(self, key, failobj = None):
          UserDict.setdefault(self, key, failobj)
          if key not in self._keys: self._keys.append(key)
  
      def update(self, dict):
          UserDict.update(self, dict)
          for key in dict.__iter__():
              if key not in self._keys: 
                  self._keys.append(key)
  
      def values(self):
          return map(self.get, self._keys)
  
      def move_to_end(self, key):
          self._keys.remove(key)
          self._keys.append(key)
  
subject: implement move_to_end(self, key)