#include <bits/stdc++.h>
using namespace std;
struct CharCount {
  char ch;
  int cnt;
  CharCount(char _ch, int _cnt) : ch(_ch), cnt(_cnt) {}
};
void solve(int a, int b, vector<CharCount>& res) {
  res.clear();
  while (a > 1 && b > 1) {
    if (a > b) {
      res.push_back(CharCount('T', a / b));
      a = a % b;
    } else {
      res.push_back(CharCount('B', b / a));
      b = b % a;
    }
  }
  if (a == 1) {
    res.push_back(CharCount('B', b - 1));
    res.push_back(CharCount('T', 1));
  } else if (b == 1) {
    res.push_back(CharCount('T', a - 1));
    res.push_back(CharCount('B', 1));
  } else
    res.clear();
}
int main(int argc, char* argv[]) {
  int N, R;
  scanf("%d %d", &N, &R);
  if (N == 1) {
    puts(R == 1 ? "0\nT" : "IMPOSSIBLE");
    return 0;
  }
  vector<CharCount> steps;
  steps.reserve(N);
  int best_mistakes = N + 1;
  vector<CharCount> best_steps;
  for (int b = 1; b < R; ++b) {
    solve(R, b, steps);
    if (!steps.empty()) {
      int cnt = 0;
      int mistakes = 0;
      for (int i = 0; i < steps.size(); ++i) {
        cnt += steps[i].cnt;
        mistakes += steps[i].cnt - 1;
      }
      if (cnt != N) continue;
      if (best_mistakes > mistakes) {
        best_mistakes = mistakes;
        best_steps = steps;
      }
    }
  }
  if (best_mistakes <= N && !best_steps.empty()) {
    printf("%d\n", best_mistakes);
    bool inv = best_steps.back().ch == 'B';
    for (int i = int(best_steps.size()) - 1; i >= 0; --i) {
      char c = inv ? (best_steps[i].ch == 'B' ? 'T' : 'B') : best_steps[i].ch;
      for (int k = best_steps[i].cnt; k > 0; --k) putchar(c);
    }
    putchar('\n');
  } else
    puts("IMPOSSIBLE\n");
  return 0;
}
