#include <bits/stdc++.h>
using namespace std;
int n, r, lst;
int mn = 1e9;
vector<int> ans;
vector<int> now, now2;
int f[10000101];
void print() {
  cout << mn << endl;
  char out[] = {'T', 'B'};
  bool now = 0;
  for (int i = 0; i < ans.size(); i++) {
    char ths = out[now];
    int tim = ans[i];
    while (tim--) putchar(ths);
    now = now ^ 1;
  }
  cout << endl;
}
void check() {
  reverse(now.begin(), now.end());
  reverse(now2.begin(), now2.end());
  int adj = 0, adj1 = 0;
  for (int i = 0; i < now.size(); i++) adj += now[i] - 1;
  for (int i = 0; i < now2.size(); i++) adj1 += now2[i] - 1;
  if (adj < mn) {
    ans = now;
    mn = adj;
  }
  if (adj1 < mn) {
    ans = now2;
    mn = adj1;
  }
}
void go() {
  int ans1 = lst, ans2 = r;
  int tim = 0, nowtim = 0;
  bool type = 0;
  now.clear();
  while (tim < n - 1) {
    nowtim += ans2 / ans1;
    tim = ans2 / ans1;
    ans2 = ans2 % ans1;
    if (ans2 == 0 && ans1 != 1) return;
    if (ans1 == 1) {
      nowtim--;
      tim--;
      ans2++;
    }
    if (ans1 == 1 && ans2 == 1 && nowtim < n - 1) return;
    if (nowtim >= n) return;
    swap(ans1, ans2);
    now.push_back(tim);
    type = type ^ 1;
    if (ans1 == 1 && ans2 == 1 && nowtim == n - 1) break;
  }
  if (nowtim != n - 1 || ans1 != 1 || ans2 != 1) return;
  now2 = now;
  if (type == 0) {
    now[now.size() - 1]++;
    now2.push_back(1);
  } else {
    now2[now2.size() - 1]++;
    now.push_back(1);
  }
  check();
}
int main() {
  cin >> n >> r;
  if (n == 1 && r == 1) {
    cout << 0 << endl << "T" << endl;
    return 0;
  }
  f[1] = f[2] = 1;
  for (int i = 3; i <= n + 1; i++) f[i] = min(f[i - 1] + f[i - 2], 1000000);
  if (r < n || r > f[n + 1]) return puts("IMPOSSIBLE"), 0;
  for (lst = n - 1; lst <= min(r, f[n]); lst++) go();
  if (!ans.size())
    puts("IMPOSSIBLE");
  else
    print();
  return 0;
}
