Beautiful Bracket Sequence (hard version)
Contest: Codeforces Round 604 (Div. 1)
Difficulty rating: 2900
Tags: combinatorics, probabilities

This is the hard version of this problem. The only difference is the limit of $$$n$$$ - the length of the input string. In this version, $$$1 \leq n \leq 10^6$$$.

Let's define a correct bracket sequence and its depth as follow:

- An empty string is a correct bracket sequence with depth $$$0$$$.
- If "s" is a correct bracket sequence with depth $$$d$$$ then "(s)" is a correct bracket sequence with depth $$$d + 1$$$.
- If "s" and "t" are both correct bracket sequences then their concatenation "st" is a correct bracket sequence with depth equal to the maximum depth of $$$s$$$ and $$$t$$$.

For a (not necessarily correct) bracket sequence $$$s$$$, we define its depth as the maximum depth of any correct bracket sequence induced by removing some characters from $$$s$$$ (possibly zero). For example: the bracket sequence $$$s = $$$"())(())" has depth $$$2$$$, because by removing the third character we obtain a correct bracket sequence "()(())" with depth $$$2$$$.

Given a string $$$a$$$ consists of only characters '(', ')' and '?'. Consider all (not necessarily correct) bracket sequences obtained by replacing all characters '?' in $$$a$$$ by either '(' or ')'. Calculate the sum of all the depths of all these bracket sequences. As this number can be large, find it modulo $$$998244353$$$.

Hacks in this problem can be done only if easy and hard versions of this problem was solved.

Input format:
The only line contains a non-empty string consist of only '(', ')' and '?'. The length of the string is at most $$$10^6$$$.

Output format:
Print the answer modulo $$$998244353$$$ in a single line.

Constraints:
Time limit: 2.0 s
Memory limit: 256.0 MB

Note:
In the first test case, we can obtain $$$4$$$ bracket sequences by replacing all characters '?' with either '(' or ')':

- "((". Its depth is $$$0$$$;
- "))". Its depth is $$$0$$$;
- ")(". Its depth is $$$0$$$;
- "()". Its depth is $$$1$$$.

So, the answer is $$$1 = 0 + 0 + 0 + 1$$$.

In the second test case, we can obtain $$$4$$$ bracket sequences by replacing all characters '?' with either '(' or ')':

- "(((())". Its depth is $$$2$$$;
- "()()))". Its depth is $$$2$$$;
- "((()))". Its depth is $$$3$$$;
- "()(())". Its depth is $$$2$$$.

So, the answer is $$$9 = 2 + 2 + 3 + 2$$$.

Example input:
??

Example output:
1

Example input:
(?(?))

Example output:
9

Editorial:
By the way calculate the depth in easy version we can construct a maximal depth correct bracket $$$S$$$. At $$$i$$$-th position containing '(' or '?' we will count how many times it appears in $$$S$$$.
Let $$$x$$$ be the number of '(' before the $$$i$$$-th position, $$$y$$$ be the number of ')' after the $$$i$$$-th position, $$$c$$$ be the number of '?' before the $$$i$$$-th position and $$$d$$$ be the number of '?' after the $$$i$$$-th position. The $$$i$$$-th position appears in $$$S$$$ iff the number of '(' before the $$$i$$$-th position must less than the number of ')' after the $$$i$$$-th position.
So we can derive a mathematics formula:
$$$\sum_{a + i < b + j}{C(c, i)\cdot C(d, j)} = \sum_{a + i < b + j}{C(c, i)\cdot C(d, d - j)} = \sum_{i + j < b + d - a}{C(c, i)\cdot C(d, j)}$$$.
Expanding both hand sides of indentity $$$(x + 1)^{c + d} = (x + 1)^c\cdot (x + 1)^d$$$, the above sum is simplified as: $$$\sum_{0\le i < b + d - a}{C(c + d, i)}$$$. Notice that $$$c + d$$$ doesn't change much, it only is one of two possible values. So we can prepare and obtain $$$O(N)$$$ complexity.