The Countdown numbers game is specified as follows: - Players are given six integer numbers and a target integer number - The six numbers should be combined using the mathematical operators +-and / in a way that gets as close as possible to the target number. Each number can only be used at most once, but it is okay not to use a number - Getting the target number is worth 10 points, getting within 5 of the target is worth 7 points, getting within 10 is worth 5 points. For instance if the numbers are (100.4,17,9,3.2) and the target is 37, then one way to do this is (100 / (3 + 2)) + 17", which would get the full 10 points. ## Evaluating numeric expressions In Countdown.h', where it says "TODO: write code here, implement a function 'evaluate Countdown that takes a 'string' containing a mathematical expression written in [Reverse Polish Notation](https://en.wikipedia.org/wiki/Reverse_Polish_notation), and returns the result of evaluating the expression, as a 'double In reverse polish notation (RPN), operators are written after rather than between what they act upon. For instance: 3.0 4.0 + ...is the same as the usual (infix) notation (3.0 +4.0). Or (. : 3.0 4.0 + 2.0 ...is the same as (3.0 + 4.0) 2. Or, coming back to the example countdown problem above, we can write (100/(3 + 2)) + 17' as: 100 3 2 +/17 + The advantage of RPN is that there is no need to worry about brackets and order of precedence. RPN expressions can be evaluated by making a stack of numbers (using e.g. a vector double>"). splitting the input string by spaces into tokens, and working through it one token at a time: If the token is a + pop two numbers a and b off the stack, and push (b + a) onto the stack * If the token is a pop two numbers a and b off the stack, and push (b-a) onto the stack If the token is a pop two numbers a and b off the stack, and push (ba) onto the stack If the token is a 7. pop two numbers a and b off the stack, and push (b / a) onto the stack . Otherwise, the token is a number: push it onto the stack After going through all the tokens, the answer is then on the top of the stack: return it. Because you only need to be able to evaluate numeric expressions for 'countdown' problems, you can safely assume your stack does not ever need to be bigger than six elements -- the worst case is an expression with six numbers (all put on the stack) followed by five arithmetic operators, e.g. 100 4 17 9 3 2 + + + + + Notes-'std::stod(s) will convert the string 's' into a double, and return its value Your code must be in C++. Do not use any of the 'C' language functions for working with strings (the functions defined on the following page https://en.cppreference.com/w/cpp/header/cstring> or those on the following page in the Numeric string conversion' section -- https:// en.cppreference.com/w/cpp/header/cstdlib>) ##Solving countdown problems The file Countdown.h' contains a small class CountdownSolution for storing solutions to Countdown numbers problems: a string containg an RPN numeric expression, and an int containing the value that expression evaluates to In Countdown.h' implement a function solveCountdown Problem that takes a vector int> containing 6 numbers, and a target number; and returns a "Countdown Solution object containing the solution to the problem that gets as close as possible to the target. Notes: The suggested solution approach is to write code that constructs different RPN expressions (using each number at most once, and using the available mathematical operators), evaluates them (using your evaluate Countdown function), and returns the best solution found (closest to target number) - The given code intToString' may be helpful for you as part of this, when building RPN expressions: it takes an int, and returns a string. C Countdown.h> 1 #ifndef COUNTDOWN_H 2 #define COUNTDOWN_H 3 4 #include 5 #include 6 7 // this is provided code for the last part of the README 8 9 std::string intToString(constint x) { 10 std::ostringstreamstr; 11 str<> main() #include "Countdown.h" 2 #include using std::cout; using std::endl; 6 7 #include int main() { intretval = ; { double answer = evaluateCountdown (std::string("3.0 4.0 +")); if (answer -- 7.0) { cout<><><><><><><><><> ... 1 #include "Countdown.h" 2 3 #include 4 using std::cout; 5 using std::endl; 6 #include <> numbers{1,2,3,4,5,6); CountdownSolution answer = solveCountdownProblem(numbers, 21); if (answer.getValue() == 21) { cout<><><><><><> numbers {75,2,5,6,1,4}; CountdownSolution answer = solveCountdownProblem(numbers, 273); if (answer.getValue() = 273) { cout<><>