#2639. 枚举(enumerate)

枚举(enumerate)

题目描述

青蛙老师在笔记本上写了一个数字NN,然后拿出了一张草稿纸进行运算:

他先将 NN 平方然后加 11,得到 N0N_0,即 N0=(N×N)+1N_0=(N\times N)+1

接着将 N0N_0 模了一个正整数 aa,得到 N1N_1,即 N1=N0modaN_1=N_0 \mod a

然后他将 N1N_1 加了一个非负整数 bb,得到 N2N_2,即 N2=N1+bN_2=N_1+b

然后他将 N2N_2 模了一个正整数 cc,得到 N3N_3,即 N3=N2modcN_3=N_2 \mod c

最后他将 N3N_3 抄回了笔记本,过了几天,他发现草稿纸找不到了并且忘记了运算的中间过程中的 a,b,ca,b,c 是多少了。

他希望根据笔记本上的 NNN3N_3 还原出中间的运算过程。

青蛙老师记得他写的数字不会很大,不会超过 PP,因此他希望求出符合条件的整数三元组 (a,b,c)(1a,cP(a,b,c)(1\le a,c\le P, 0bP)0\le b\le P)

但是他不会做,于是将问题交给你了。

青蛙老师希望知道符合条件的三元组个数,也想知道具体的方案,但符合条件的三元组个数可能很多,如果超过 10510^5 个,输出方案的时候只需要输出字典序最小的 10510^5 个三元组即可。

输入格式

一行三个整数 N,N3,PN,N_3,P

输出格式

第一行输出不同的三元组个数 QQ

接下来 min(Q,105)\min(Q,10^5) 行按字典序输出对应的三元组(aa 小的先输出,若 aa 相同则 bb 小的先输出,若 aabb 均相同则 cc 小的先输出),每行三个数字以空格隔开。若符合条件的三元组个数超过 10510^5,你只需要输出字典序最小的 10510^5 个三元组。

样例输入

1 2 3

样例输出

4
1 2 3
2 2 3
3 0 3
3 3 3

大样例:e.zip

数据范围

对于 35%35\% 的数据,满足 P100P\le 100

对于另外 25%25\% 的数据,满足 P2000P\le 2000

对于 100%100\% 的数据,满足 0N3,NP0\le N_3,N\le P, 1P1051\le P\le 10^5