1678: 连续子段和

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:10 解决:1

题目描述

  在数列中,求连续子段和是非常简单的,不是吗?但是我们如果己知数列和某个数 sum 求在数列中是否存在一个连续子段和与 sum 相等就不是那么容易了。今天你就需要来解决这个难题。   我们己知数列 2, 6, 12, 20, …, n*(n+1) 与和 sum,问在数列中是否存在这样一段连续子段,其和为 sum。

输入

  输入每行一个 sum,sum 的值小于 1014。输入以 EOF 结束。

输出

  对于每个 sum,第一行先输出满足条件的子段数目 s。以后 s 行每行输出两个数“A B”,中间用空格隔开,表示从数列第 A 项开始(数列第一项编号为 1),连续 B 个数的和。对于存在多个子段的,以 A 为升序进行输出。每个用例后输出一个空行。

样例输入 复制

90
5
174649748

样例输出 复制

1
9 1

0

2
286 532
452 399

提示

  90 可以表示为从第九项(90)起连续一项的和。   在数列中任何一段的和都不可能为 5。   174649748 可以表示为两个连续子段的和。按起始项位置大小升序排列。