终于结束的起点

题目背景

> 终于结束的起点 > 终于写下句点 > 终于我们告别 > 终于我们又回到原点 > …… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演。 如果这次 NOIp 是你的起点,那么祝你的 OI 生涯如同夏花般绚烂。 如果这次 NOIp 是你的终点,那么祝你的 OI 回忆宛若繁星般璀璨。 也许这是你最后一次在洛谷上打比赛,也许不是。 不过,无论如何,祝你在一周后的比赛里,好运。 当然,这道题也和轮回有关系。

题目描述

广为人知的斐波拉契数列 $\mathrm{fib}(n)$ 是这么计算的 $$ \mathrm{fib}(n)=\begin{cases} 0,& n=0 \\ 1,& n=1 \\ \mathrm{fib}(n-1) + \mathrm{fib}(n-2),& n>1 \end{cases} $$ 也就是 $0, 1, 1, 2, 3, 5, 8, 13 \cdots$,每一项都是前两项之和。 小 F 发现,如果把斐波拉契数列的每一项对任意大于 $1$ 的正整数 $M$ 取模的时候,数列都会产生循环。 当然,小 F 很快就明白了,因为 ($\mathrm{fib}(n - 1) \bmod M$) 和 ($\mathrm{fib}(n - 2) \bmod M)$ 最多只有 $M ^ 2$ 种取值,所以在 $M ^ 2$ 次计算后一定出现过循环。 甚至更一般地,我们可以证明,无论取什么模数 $M$,最终模 $M$ 下的斐波拉契数列都会是 $0, 1, \cdots, 0, 1, \cdots$。 现在,给你一个模数 $M$,请你求出最小的 $n > 0$,使得 $\mathrm{fib}(n) \bmod M = 0, \mathrm{fib}(n + 1) \bmod M = 1$。

输入输出格式

输入格式


输入一行一个正整数 $M$。

输出格式


输出一行一个正整数 $n$。

输入输出样例

输入样例 #1

2

输出样例 #1

3

输入样例 #2

6

输出样例 #2

24

说明

#### 样例 1 解释 斐波拉契数列为 $0, 1, 1, 2, 3, 5, 8, 13, 21, 34, \cdots$,在对 $2$ 取模后结果为 $0, 1, 1, 0, 1, 1, 0, 1, 1, 0, \cdots$。 我们可以发现,当 $n = 3$ 时,$f(n) \bmod 2= 0, f(n + 1) \bmod 2 = 1$,也就是我们要求的 $n$ 的最小值。 #### 数据范围 对于 $30\%$ 的数据,$M \leq 18$; 对于 $70\%$ 的数据,$M \leq 2018$; 对于 $100\%$ 的数据,$2 \leq M \leq 706150=\verb!0xAC666!$。 #### 提示 如果你还不知道什么是取模 $(\bmod)$,那我也很乐意告诉你,模运算是求整数除法得到的余数,也就是竖式除法最终「除不尽」的部分,也即 $$a \bmod M =k \iff a = bM + k\ (M > 0, 0 \leq k < M)$$ 其中 $a, b, k$ 都是非负整数。 如果你使用 `C` / `C++`,你可以使用 `%` 来进行模运算。 如果你使用 `Pascal`,你可以使用 `mod` 来进行模运算。