Below is how the filenames are represented ARRAY []=[50,11,33,21,40,50,40,40,21] Below is the expected output after de-duplication ARRAY []=[11,21,33,40,50] ATTN: Notice the reduced size of the output array. Also, take a look again at the input arnay and be reminded that the input arnay is not sorted! Further, please be reminded that you cannot use library functions to either sort and or perform the de-duplication operation. Doing so would stmight up result in a seore of Zero! You will solve the problem as: [100 points] Implement the function in such a way that your solution solves the problem with O(nlog2(n)) time complexity overall and O(n) space complexity. Here, n is the length of the list of input integers (array). I believe the sorting routine that can be used here is Merge Sort. Please state as code comment which sorting routine you are using. sort the array with that algorithm and solve the de-duplication problem thereafter. Deduplication part of the solution in itself must adhere to O(n) time and O(1) space bounds. However, at this stage of the course we will not be considering any memory used by recursion. Very Very Important: 1. (1) Your code should be well commented which explains all the steps you are performing to solve the problem. A submission without code comments will immediately be deducted 15 points! 2. (2) As a comment in your code, please write your test-cases on how you would test your solution assumptions and hence your code. A submission without test cases will immediately be deducted 15 points! Example of cases to be tested for are like: What if the array input which is expected does not exist that is, input is a null. How should your code handle such a situation? Maybe output some message like" Null input case, so no output"? What if the length of the array is one? _ so on and so forth. Please Remember Although, written as comments - You will address your test cases in the form of code and not prose ?)