Updated with divide-n-conquer implementation, with Strassen implementation.