CF217B Blackboard Fibonacci

题目描述

斐波那契数列是一串整数:$ f_{0}=0 $,$ f_{1}=1 $,$ f_{2}=1 $,$ f_{3}=2 $,$ f_{4}=3 $,$ f_{5}=5 $,$\ldots$,$ f_{n}=f_{n-2}+f_{n-1} $。也就是说,每一个后继的数字等于前两个数字之和。 Bajtek 发明了一种在黑板上计算斐波那契数的方法。他首先写下 $0$,在其下方再写下 $1$。之后,他可以执行以下两种操作: - 操作“T”:用两数之和替换顶部数字; - 操作“B”:用两数之和替换底部数字。 若他进行了 $n$ 次操作,始终以“T”开始,且接下来每一步交替选择操作(即操作序列为“TBTBTB\ldots”),则最后写下的数字恰好为 $ f_{n+1} $。 不幸的是,Bajtek 有时会犯错误,导致连续重复某个操作两次或更多次。例如,如果 Bajtek 想要计算 $ f_{7} $,他应该做 $n=6$ 步操作:“TBTBTB”。但若实际操作为“TTTBBT”,他一共犯了 3 次错误,且最后算出的第七个斐波那契数为 10。操作序列中的错误数为相邻相同操作的对数(即“TT”或“BB”的数量)。 现在给定 Bajtek 执行的操作次数 $n$,以及他操作后写下的结果 $r$(即最后写下的数字),请你求出 Bajtek 至少犯了多少次错误,以及输出一种具体的操作顺序,使得错误次数最少且能够正确计算出结果 $r$。 保证 Bajtek 始终以“T”开头。

输入格式

第一行包含两个整数 $n$ 和 $r$($1 \leq n, r \leq 10^{6}$)。

输出格式

输出两行: 第一行输出一个整数,表示 Bajtek 所犯的最少错误次数; 第二行输出一个长度为 $n$ 的,仅由“T”和“B”组成的字符串,表示按最少错误次数所得结果 $r$ 的一种操作序列,且一定以“T”开头。 若不存在满足条件的操作序列,输出“IMPOSSIBLE”。

说明/提示

由 ChatGPT 5 翻译