


1. He always presses the button which has a digit written on it, i.e., he never presses the ‘*’ and ‘#’ button.
2. Once he presses a button, the next button he presses should either be the same button or the button which is adjacent to the previous button.
3. In starting he can press any button except ‘*’ and ‘#’.

The first line of input contains a single integer 'T', representing the number of test cases or queries to be run.
Then the 'T' test cases follow.
The first and only line of each test case contains a positive integer N, which represents the number of buttons to press.
For each test case, print the number of numbers that can be generated after pressing exactly the N buttons on the keypad.
The output of each test case is printed in a separate line.
You do not need to print anything, it has already been taken care of. Just implement the given function.
1 <= T <= 10
1 <= N <= 5 * 10^4
Time Limit: 1 sec
We will recursively find the different numbers we can generate after pressing N buttons on the keypad.
For simplicity, we will define the keypad with a 2D matrix.
keypad[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {-1, 0, -1}}
Make a recursive function ‘generateNumbersHelper’ which will return the number of numbers we can generate after pressing ‘N’ buttons on the ‘KEYPAD’.
In the previous approach, we are recalculating the answer. We can optimise it by storing the answers which we have calculated.
For example:
Consider the same recursive function, used in the previous approach.
Function: generateNumbersHelper('COUNT', ‘PREV’), where ‘COUNT’ denotes the number of buttons pressed and ‘PREV’ denotes the previous button pressed.
We are recalculating the answer for {(6,1) and (6,5)}.
So since there are overlapping solutions, we can store the solution which we have calculated. For this, we will make a 2D array, ‘DP’ to store the answer.
‘DP[COUNT][PREV]’ denotes the number of different numbers we can generate after pressing ('N'-count) buttons on the ‘KEYPAD’ and ‘PREV’ is ('COUNT'-1)th button that we have pressed.
Make a recursive function ‘generateNumbersHelper’ which will return the number of numbers we can generate after pressing ‘N’ buttons on the ‘KEYPAD’.
In the previous approach, we create a 2D array ‘DP’ of size (‘N’+1) * 10 to store the answer.
But, for calculating the answers for ‘DP[i][0 to 9]’, we only need values of ‘DP[i-1][0 to 9]’.
Parity of ‘i’ and (‘i-1’) will always be different i.e. if ‘i’ is odd, (‘i-1’) will be even and vice-versa. So, instead of storing the answer of ‘DP[i][j]’, we can store the answer for ‘DP[parity of i][j]’.
It means we can optimize the space by creating the ‘DP’ array of size 2 * 10.