#CF2135E2. 超越回文(困难版)

超越回文(困难版)

这是该问题的困难版。两个版本的区别在于:此版本中 n2×107n \leq 2 \times 10^7,且所有测试用例的 nn 之和不超过 10810^8。只有解决了该问题的所有版本,你才能进行 Hack。


对于一个二进制字符串 rr,我们定义 f(r)f(r) 为以下过程的结果:

  1. rr同时删除所有的 10 子串†;
  2. 重复上述操作,直到 rr 中不再存在 10 子串。

例如,f(100110001)=001f(\texttt{100110001}) = \texttt{001},因为 rr 的变化过程如下: $\texttt{1}\underline{\texttt{10}}\texttt{0}\underline{\texttt{10}}\texttt{001} \to \texttt{0}\underline{\texttt{10}}\texttt{01} \to \texttt{001}$。

我们称一个二进制字符串 ss 是**“几乎回文”**,当且仅当 f(s)=f(rev(s))f(s) = f(\operatorname{rev}(s))‡。

Aquawave 给了你一个整数 nn。你需要帮助他计算长度为 nn不同的“几乎回文”二进制字符串的数量,结果对 998244353998244353 取模。


二进制字符串是指每个字符都是 01 的字符串。

字符串 aa 是字符串 bb 的子串,如果 aa 可以通过删除 bb 的开头若干个(可能为零个或全部)字符以及结尾若干个(可能为零个或全部)字符得到。

rev(s)\operatorname{rev}(s) 是将 ss 从右向左书写得到的字符串。例如,$\operatorname{rev}(\texttt{10100}) = \texttt{00101}$。


输入

每个测试包含多个测试用例。第一行包含测试用例的数量 tt1t1041 \leq t \leq 10^4)。

接下来每个测试用例的描述占一行,每行包含一个整数 nn1n2×1071 \leq n \leq 2 \times 10^7)—— 二进制字符串的长度。

保证所有测试用例的 nn 之和不超过 10810^8


输出

对于每个测试用例,输出一个整数 —— 长度为 nn 的不同的“几乎回文”二进制字符串的数量,对 998244353998244353 取模。


示例

输入:

12
1
2
3
4
5
6
7
8
9
10
100
1024

输出:

2
2
4
8
12
26
44
86
164
302
307217648
950903700

提示

  • 在第一个测试用例中,所有长度为 11 的二进制字符串都是“几乎回文”。
  • 在第二个测试用例中,所有长度为 22 的“几乎回文”二进制字符串是 00\texttt{00}11\texttt{11}
  • 在第三个测试用例中,所有长度为 33 的“几乎回文”二进制字符串是 000\texttt{000}010\texttt{010}101\texttt{101}111\texttt{111}