AT_xmascon23_f Failed Failure Link
Description
文字列 $ t $ が文字列 $ s $ の **border** であるとは, $ t $ が $ s $ の prefix かつ suffix であることとする.長さ $ n $ の文字列 $ s $ と整数 $ 1 \le k \le n $ に対し, $ f(s, k) $ を, $ s $ の長さ $ k $ の prefix の border であって,長さが $ k $ 未満のもののうち最長のものの長さとする (空文字列は任意の文字列の border であるから,これは well-defined である).また, $ f(s, 0) = -1 $ と定める.
しろうさは,長さ $ n $ の文字列 $ s $ が与えられたとき $ f(s, 0), f(s, 1), \ldots, f(s, n) $ を計算するアルゴリズムを実装しようとしたが,間違えてしまった.以下の C++ コード片で表される関数 `Xmas` に $ s $ を引数として与えたときに計算される整数列 `g` を $ (g(s, 0), g(s, 1), \ldots, g(s, n)) $ とする.
```
#include
#include
std::vector Xmas(std::string s) {
int n = s.size();
std::vector g(n + 1);
int j = g[0] = -1;
for (int i = 0; i < n; ++i) {
for (; j >= 0 && s[j] == s[i]; j = g[j]) {}
g[i + 1] = ++j;
}
return g;
}
```
正整数 $ A, B $ が与えられる. $ A $ 個の文字 `a` と $ B $ 個の文字 `b` からなる長さ $ A + B $ の文字列 $ s $ に対する, $ \displaystyle\sum_{k=0}^{A+B} \bigl\lvert f(s, k) - g(s, k) \bigr\rvert $ の最小値,および最小値を達成する $ s $ を $ 1 $ つ求めよ.
Input Format
入力は以下の形式で標準入力から与えられる.
> $ A $ $ B $
Output Format
$ 1 $ 行目に, $ \displaystyle\sum_{k=0}^{A+B} \bigl\lvert f(s, k) - g(s, k) \bigr\rvert $ の最小値を出力せよ.
$ 2 $ 行目に,最小値を達成する $ s $ のうち $ 1 $ つを出力せよ.
Explanation/Hint
### Sample Explanation 1
$ f(\mathtt{aba}, 0) = -1,\, f(\mathtt{aba}, 1) = 0,\, f(\mathtt{aba}, 2) = 0,\, f(\mathtt{aba}, 3) = 1 $ である.
$ g(\mathtt{aba}, 0) = -1,\, g(\mathtt{aba}, 1) = 0,\, g(\mathtt{aba}, 2) = 1,\, g(\mathtt{aba}, 3) = 2 $ である.
### Constraints
- $ 1 \le A, B \le 10^5 $ .