code: def _step3(self, word):
          
  
          ch = word[-1]
  
          if ch == 'e':
              if word.endswith("icate"):
                  return word[:-3] if self._m(word, len(word)-6) else word
              elif word.endswith("ative"):
                  return word[:-5] if self._m(word, len(word)-6) else word
              elif word.endswith("alize"):
                  return word[:-3] if self._m(word, len(word)-6) else word
              else:
                  return word
          elif ch == 'i':
              if word.endswith("iciti"):
                  return word[:-3] if self._m(word, len(word)-6) else word
              else:
                  return word
          elif ch == 'l':
              if word.endswith("ical"):
                  return word[:-2] if self._m(word, len(word)-5) else word
              elif word.endswith("ful"):
                  return word[:-3] if self._m(word, len(word)-4) else word
              else:
                  return word
          elif ch == 's':
              if word.endswith("ness"):
                  return word[:-4] if self._m(word, len(word)-5) else word
              else:
                  return word
  
          else:
              return word
docs: step3() deals with -ic-, -full, -ness etc. similar strategy to step2.