众所周知,复数通常表示为实部与虚部之和。例如 $3 + 2i$,其中 $3$ 是实部,$2$ 是虚部,$i$ 是虚数单位。
给定一个素数 $p$ 和一个正整数 $n$,你的程序需要输出满足以下条件的所有复数的乘积:
- 实部和虚部均为不超过 $n$ 的非负整数。
- 实部和虚部中至少有一个不是 $p$ 的倍数。
例如,当 $p = 3$ 且 $n = 1$ 时,满足条件的复数为 $1$ ($= 1 + 0i$),$i$ ($= 0 + 1i$) 和 $1 + i$ ($= 1 + 1i$),这些数的乘积,即 $1 \times i \times (1 + i)$ 为 $-1 + i$。
输入格式
输入包含单个测试用例,格式如下:
$p \ n$
$p$ 是小于 $5 \times 10^5$ 的素数。$n$ 是不超过 $10^{18}$ 的正整数。
输出格式
在一行中输出两个用空格分隔的整数。当满足给定条件的所有复数的乘积为 $a + bi$ 时,第一个和第二个整数应分别为 $a \pmod p$ 和 $b \pmod p$。此处,$x \pmod y$ 指的是 $0$ 到 $y - 1$ 之间(含)的整数 $z$,使得 $x - z$ 能被 $y$ 整除。
如正文所述,当 $p = 3$ 且 $n = 1$ 时,计算出的乘积为 $-1 + i$。然而,由于 $-1 \pmod 3$ 为 $2$,因此样例输出 1 显示为 $2$ 和 $1$。
样例
样例输入 1
3 1
样例输出 1
2 1
样例输入 2
5 5
样例输出 2
0 0
样例输入 3
499979 1000000000000000000
样例输出 3
486292 0