Intermediate object-oriented programming: inheritance, abstract classes, interfaces and exception handling. Inroduction to algorithms and data structures: recursion, searching, sorting, linked lists, stacks, queues, basics of trees and tree traversal algorithms, natural language processing and machine learning.