#arc0074. [arc007_4]破れた宿題

[arc007_4]破れた宿題

问题

高桥君正在解一道数学作业题,要求他回答等差数列的首项和公差。等差数列是指相邻两个数字之间的差是一个固定的常数,首数字称为首项,相邻数字之间的差称为公差,最后一个数字称为末项。不过,高桥君不小心将作业中的数列抄写在笔记本上时,没有用空格或逗号分隔数字,而是以由0到9的数字构成的一个字符串的形式写下来了。而且,由于笔记本的保存方式有些粗糙,他把其中一部分撕裂并剪掉了。撕裂和剪掉的部分包括了首项和末项,但至少确认了首项的一部分还留在了笔记本上。现在给定这样一个字符串,请推测原始的数列并回答首项和公差。

需要注意的是,首项和公差都是大于等于1的整数,如果存在多个解,则回答首项最小的解,如果存在多个首项相等的解,则回答公差最小的解。 此外,无需考虑数字前面可能出现的无关零(如003,012),它们并不包含在抄写的数列中。


输入

输入以以下格式从标准输入中给出:c0c_{0}c1c_{1}‥‥cN1c_{N-1}

  • 输入只有一行,是一个长度为NN的字符串,该字符串是等差数列的一部分。
  • 字符串由0到9的数字组成。

部分分

测试数据有以下4种类型的数据集,每个数据集对应不同范围的字符长度N,每个数据集都会提供字符串N的测试数据。如果对某个数据集中的所有测试数据输出正确答案,则即使在其他数据集中输出错误答案,也会给予部分得分。

  • level1(25分):1N41≦N≦4
  • level2(25分):1N61≦N≦6
  • level3(25分):1N2001≦N≦200
  • level4(25分):1N1,0001≦N≦1,000

输出

对于可能被切分的等差数列,以空格分隔的形式在标准输出中输出可能的首项和公差,仅占一行。
如果存在多个解,则回答首项最小的解,如果存在多个首项相等的解,则回答公差最小的解。
最后请输出换行符。


示例 1


1

输出 1


1 1
  • 虽然首项前后可能有连续的数字,但最小的首项是没有被切割的数字1。
  • 公差可以是任意正整数,但最小的公差是1。

示例 2


0203

输出 2


10 10
  • 由于0202不能作为一个数被认可,所以首项不是2。
  • 首项10中的1被切割掉了,末项30中的0被切割掉了,原始数列是102030

示例 3


456789101112131415

输出 3


4 1
  • 这是一个没有缺失的等差数列,首项是4,公差是1。

示例 4


579111315171921232

输出 4


5 2
  • 末项25的5部分被切割掉了,这是一个等差数列。

示例 5


001131261391521651

输出 5


100 13
  • 首项100和末项178的一部分被切割掉了。

来源

ARC 007