Jasio 在一张巨大的方格纸上绘制折线。他从纸的左上角开始,在不抬起铅笔的情况下,通过以下三种方式之一绘制折线的后续线段:
(a) 向右沿方格边移动(长度为一个方格); (b) 向下沿方格边移动(长度为一个方格); (c) 向右下方沿方格对角线移动(长度为一个方格的对角线)。
下图展示了 Jasio 可能绘制的一个折线示例(由 4 条线段组成)。
Jasio 在画完折线后会计算其长度。为此,他编写了如下 C++ 函数:
std::string dlugosc(const std::string& lamana) {
int proste = 0, przekatne = 0;
for (char odcinek : lamana) {
if (odcinek == 'c')
przekatne++;
else
proste++;
}
long double wynik = sqrtl(2.0) * przekatne + proste;
char buf[30];
sprintf(buf, "%.6Lf", wynik);
return buf;
}
函数 dlugosc 接收一个表示连续移动的字符串作为参数(字符 'a'、'b' 或 'c' 分别代表向右、向下或沿对角线移动)。sqrtl 是计算平方根的标准函数(来自 cmath 库)。你可以假设 dlugosc 函数在 Jasio 的电脑、你的比赛工作站以及评测系统中表现一致。
Jasio 给了你 dlugosc 函数的运行结果(至少他是这么声称的)。他想知道,有多少条由最多 $10^9$ 条线段组成的折线(对应函数合法的参数),其计算结果恰好等于这个值。请帮他回答这个问题。
输入格式
输入仅一行,包含一个实数 $l$ ($0 < l \le 10^9$),该数小数点后恰好有六位数字,表示 Jasio 给出的折线长度,同时也代表他声称的 dlugosc 函数的返回值。
输出格式
输出仅一行,包含满足条件的折线数量。如果该数量超过 $10^{18}$,则输出单词 SPORO。
请记住,Jasio 可能在撒谎,他给出的数值可能根本不是任何合法参数下 dlugosc 函数的返回值——在这种情况下,应输出 0。
样例
输入 1
2.414214
输出 1
4