Can anyone help with the approach of these questions.
Given a string message, return the number of such subsequences within it.
Example
For message = "abcdba", the output should be
solution(message) = 2.
You can obtain such palindromes: "abcba" and "abdba".
For message = "aabccba", the output should be
solution(message) = 4.
You can obtain "abcba" 4 times with different a and c from the given string.
Input/Output
[execution time limit] 0.5 seconds (cpp)
[input] string message
The encrypted message.
Guaranteed constraints:
1 ≤ message.length ≤ 700.
Note
Strings will have max length 100
They will consist of lowercase english alphabets.
Return the answer modulo 10^9 + 7.
Sample test case
p: ab
q: ba
r: aba
output: 2
Two ways to form aba
from p, a, from q, ba
from p, ab, from q, a
[execution time limit] 1 seconds (cpp)
Constraints
1 <= n <= 100000
1 <= val[i] <= 1000
array p represents a valid tree, rooted at node 1.
Sample Input:
n: 5
par: [1, 1, 3, 3]
val: [1,2,3,4,5]
Sample Output:
6
Sample Explanation:
par array is [1,1,3,3]. This means parent of node 2 and node 3 is 1, and parent of node 4 and node 5 is 3.
val array is [1,2,3,4,5]. This means values of nodes 1,2,3,4 and 5 are 1,2,3,4 and 5 respectively.
The tree looks like this:

Sample Tree
For node 1, the nodes in its subtree whose values are co-prime with value of 1, i.e. 1 are: 2,3,4 and 5. Count: 4
For nodes 2,4 and 5 there are no such nodes as they have no subtree.
For node 3, the nodes in its subtree whose values are co-prime with value of 3 i.e. 3 are: 4 and 5. Count: 2.
So final answer = 4 + 2 = 6.