#include <bits/stdc++.h>
using namespace std;
template <class T>
void _R(T &x) {
  cin >> x;
}
void _R(int &x) { scanf("%d", &x); }
void _R(long long &x) { scanf("%lld", &x); }
void _R(unsigned long long &x) { scanf("%llu", &x); }
void _R(double &x) { scanf("%lf", &x); }
void _R(char &x) { scanf(" %c", &x); }
void _R(char *x) { scanf("%s", x); }
void R() {}
template <class T, class... U>
void R(T &head, U &...tail) {
  _R(head);
  R(tail...);
}
template <class T>
void _W(const T &x) {
  cout << x;
}
void _W(const int &x) { printf("%d", x); }
void _W(const long long &x) { printf("%lld", x); }
void _W(const double &x) { printf("%.16f", x); }
void _W(const char &x) { putchar(x); }
void _W(const char *x) { printf("%s", x); }
template <class T, class U>
void _W(const pair<T, U> &x) {
  _W(x.F);
  putchar(' ');
  _W(x.S);
}
template <class T>
void _W(const vector<T> &x) {
  for (auto i = x.begin(); i != x.end(); _W(*i++))
    if (i != x.cbegin()) putchar(' ');
}
void W() {}
template <class T, class... U>
void W(const T &head, const U &...tail) {
  _W(head);
  putchar(sizeof...(tail) ? ' ' : '\n');
  W(tail...);
}
const int MOD = 1e9 + 7, mod = 1e9 + 7;
long long qpow(long long a, long long b) {
  long long res = 1;
  a %= MOD;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % MOD;
    a = a * a % MOD;
  }
  return res;
}
const int MAXN = 5e5 + 10, MAXM = 2e6 + 10;
const int INF = INT_MAX, SINF = 0x3f3f3f3f;
const long long llINF = LLONG_MAX;
const int inv2 = 5e8 + 4;
const int Lim = 1 << 20;
vector<char> ans;
long long res;
void printans() {
  reverse(ans.begin(), ans.end());
  if (res > 200000) {
    puts("BIG");
    printf("%lld\n", res);
  } else if (((int)ans.size()) <= 500000) {
    puts("SMALL");
    printf("%d\n", ((int)ans.size()));
    for (auto j : ans) printf("%c", j);
  } else
    W("IMPOSSIBLE");
  exit(0);
}
long long a[MAXN], b[MAXN];
int n;
void cmp() {
  bool f = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i] != b[i]) f = 1;
  }
  if (!f) printans();
  f = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i] != b[n - i + 1]) f = 1;
  }
  if (!f) ans.push_back('R'), printans();
}
void see() {
  for (int i = 1; i < n; i++)
    if (b[i + 1] < b[i]) {
      reverse(b + 1, b + n + 1);
      ans.push_back('R');
      break;
    }
  for (int i = 1; i < n; i++)
    if (b[i + 1] < b[i]) {
      puts("IMPOSSIBLE");
      exit(0);
    }
}
void cha() {
  ans.push_back('P');
  res++;
  if (((int)ans.size()) > 5000000) {
    puts("IMPOSSIBLE");
    exit(0);
  }
  for (int i = n; i; i--) {
    b[i] -= b[i - 1];
    if (b[i] <= 0) {
      puts("IMPOSSIBLE");
      exit(0);
    }
  }
}
void solve() {
  R(n);
  if (n == 2) {
    long long a1, a2, b1, b2;
    scanf("%lld%lld%lld%lld", &a1, &a2, &b1, &b2);
    if (a1 == b1 && a2 == b2) printans();
    if (a1 == b2 && a2 == b1) ans.push_back('R'), printans();
    long long c1 = b1, c2 = b2;
    while (c1 && c2) {
      if (c1 > c2) swap(c1, c2);
      if (c1 < a1 && c2 < a2) return W("IMPOSSIBLE");
      if (c1 < a2 && c2 < a1) return W("IMPOSSIBLE");
      if (c1 == a1) {
        if (c2 < a2 || (c2 - a2) % c1 != 0)
          return W("IMPOSSIBLE");
        else
          res += (c2 - a2) / c1;
        if (res > 200000)
          printans();
        else
          break;
      } else if (c1 == a2) {
        if (c2 < a1 || (c2 - a1) % c1 != 0)
          return W("IMPOSSIBLE");
        else
          res += (c2 - a1) / c1;
        if (res > 200000)
          printans();
        else
          break;
      }
      res += c2 / c1;
      c2 %= c1;
      if (c1 < a1 && c2 < a2) return W("IMPOSSIBLE");
      if (c1 < a2 && c2 < a1) return W("IMPOSSIBLE");
    }
    while (b1 && b2) {
      if (b1 > b2) swap(b1, b2), ans.push_back('R');
      if (b1 < a1 && b2 < a2) return W("IMPOSSIBLE");
      if (b1 < a2 && b2 < a1) return W("IMPOSSIBLE");
      if (b1 == a1) {
        if (b2 < a2 || (b2 - a2) % b1 != 0)
          return W("IMPOSSIBLE");
        else {
          long long tmp = (b2 - a2) / b1;
          for (int i = 1; i <= tmp; i++) ans.push_back('P');
        }
        printans();
      }
      if (b1 == a2) {
        if (b2 < a1 || (b2 - a1) % b1 != 0)
          return W("IMPOSSIBLE");
        else {
          long long tmp = (b2 - a1) / b1;
          for (int i = 1; i <= tmp; i++) ans.push_back('P');
        }
        ans.push_back('R');
        printans();
      }
      for (int i = 1; i <= b2 / b1; i++) ans.push_back('P');
      b2 %= b1;
    }
    return W("IMPOSSIBLE");
  } else {
    for (int i = 1; i <= n; i++) R(a[i]);
    for (int i = 1; i <= n; i++) R(b[i]);
    while (1) {
      cmp();
      see();
      cha();
    }
  }
}
int main() {
  int T = 1;
  while (T--) solve();
  return 0;
}
