Time: O(n*n), Space: O(n*n)