
给定一个长度为

的整数数组

。

你需要将整个数组划分成若干个非空连续段。设这些连续段的异或和依次为

其中

。

为保证数组被划分为若干个非空连续段,必须有

,

,且对于所有

,都有

。

如果序列

单调不减,即对所有

都满足

,我们称这种划分是合法的。

现在请你求出:

在所有合法划分中,段数最多的有多少段;

在达到最多段数的前提下,有多少种不同的合法划分方案。

由于答案可能很大,你只需要输出方案数对给定模数

取模后的结果。
【名词解释】
按位异或(

):对两个整数的二进制表示按位进行异或运算。
输入描述:
第一行包含两个整数
,分别表示数组长度和取模所用的模数。
第二行包含
个整数
,表示给定数组。
输出描述:
输出一行两个整数,分别表示:
合法划分中的最多段数;
在达到最多段数的前提下,合法划分方案数对
取模后的结果。