Write a program that reads a file containing a sorted list of words (one word per line, no spaces, all lower case), then identifies the  1. 1.	1st longest word in the file that can be constructed by concatenating copies of shorter words also found in the file.  2. 2.	The program should then go on to report the 2nd longest word found  3. 3.	Total count of how many of the words in the list can be constructed of other words in the list.  Please reply to this email with your solution as source code along with  1. the 1st and the 2nd  longest words that the program finds and the count of words that can be constructed as an output in the body of the email and any comments you have on the approach you took. If you have any questions about the problem, please feel free to email us back.  For example, if the file contained:         cat        cats        catsdogcats        catxdogcatsrat        dog        dogcatsdog        hippopotamuses        rat        ratcatdogcat  The answer would be 'ratcatdogcat' - at 12 letters, it is the longest word made up of other words in the list.  The program should then go on to report how many of the words in the list can be constructed of other words in the list. Please send your solution in source code form, written in one of the following languages: C, C++, Java, Python, or Ruby.   This is not just a puzzle or classroom assignment; it is your opportunity to demonstrate your engineering judgment in a way that you cannot do in a personal interview.   Performance matters: the program should return results quickly even for very large lists (100,000+ items).   Please find attached a file, “words for problem.txt”, containing a word list, with 173k rows, for testing purposes.