#include <bits/stdc++.h>
using namespace std;
int t, n, m;
long long a[200005], b[200005], c[200005];
int q[2][200005 << 2];
long long tot = 0, cnt = 0, minn = 0;
inline long long read() {
  long long ans = 0, f = 1;
  char c = getchar();
  while (c > '9' || c < '0') {
    if (c == '-') f = -1ll;
    c = getchar();
  }
  while (c >= '0' && c <= '9')
    ans = (ans << 1) + (ans << 3) + (c ^ 48), c = getchar();
  return ans * f;
}
inline bool check() {
  bool flag = 1;
  for (int i = 1; i <= n; ++i) flag &= (b[i] > 0);
  return flag;
}
inline bool check1() {
  bool flag = 1;
  for (int i = 1; i <= n; ++i) flag &= (b[i] == a[i]);
  return flag;
}
inline int check2() {
  int flag = 0;
  for (int i = 2; i <= n; ++i) {
    if (b[i] == b[i - 1]) return 0;
    flag += (b[i] > b[i - 1] ? 1 : -1);
  }
  if (flag == -n + 1) return -1;
  if (flag == n - 1) return 1;
  return 0;
}
inline void dec() {
  for (int i = n; i; i--) b[i] -= b[i - 1];
}
inline bool work(long long &tot, long long &cnt, long long &minn, int k) {
  tot = cnt = minn = 0;
  while (b[1] && b[2]) {
    if (a[1] == b[2]) swap(b[1], b[2]), tot++, cnt++;
    if (a[1] == b[1]) {
      if (b[2] == a[2]) break;
      if ((b[2] - a[2]) % a[1] == 0 && b[2] >= a[2])
        q[k][++tot] = (b[2] - a[2]) / a[1], cnt += (b[2] - a[2]) / a[1],
        minn += (b[2] - a[2]) / a[1];
      else
        return 0;
      break;
    }
    if (b[1] > b[2]) swap(b[1], b[2]), tot++, cnt++;
    q[k][++tot] = b[2] / b[1], cnt += b[2] / b[1], minn += b[2] / b[1],
    b[2] %= b[1];
  }
  if (!check()) return 0;
  if (k) tot++, cnt++;
  return 1;
}
inline bool work1(long long &tot, long long &cnt, long long &minn, int k) {
  minn = tot = cnt = 0;
  while (check()) {
    if (b[n] == a[1]) reverse(b + 1, b + 1 + n), tot++, cnt++;
    if (a[1] == b[1]) {
      if (check1()) break;
      tot++;
      while (!check1() && check()) dec(), cnt++, q[k][tot]++, minn++;
      if (!check())
        return 0;
      else
        break;
    }
    int cur = check2();
    if (cur == 0) return 0;
    if (cur == -1) reverse(b + 1, b + 1 + n), cnt++, tot++;
    tot++, q[k][tot]++, minn++, cnt++;
    dec();
  }
  if (!check()) return 0;
  if (k) tot++, cnt++;
  return 1;
}
inline void out(int k) {
  if (minn > 200000)
    puts("BIG"), printf("%lld", minn);
  else {
    puts("SMALL");
    printf("%d\n", cnt);
    for (int i = tot; i; i--)
      if (!q[k][i])
        putchar('R');
      else {
        while (q[k][i]--) putchar('P');
      }
  }
}
int main() {
  n = read();
  for (int i = 1; i <= n; ++i) a[i] = read();
  for (int i = 1; i <= n; ++i) c[i] = b[i] = read();
  if (n == 1) {
    if (a[1] == b[1])
      puts("SMALL"), puts("0");
    else
      puts("IMPOSSIBLE");
    return 0;
  } else if (n == 2) {
    long long tot1 = 1e18, minn1 = 1e18, cnt1 = 1e18;
    bool flag1 = work(tot, cnt, minn, 0);
    if (flag1) {
      tot1 = tot, cnt1 = cnt, minn1 = minn;
    }
    reverse(a + 1, a + 1 + n);
    for (int i = 1; i <= n; ++i) b[i] = c[i];
    bool flag2 = work(tot, cnt, minn, 1);
    if (!flag2) minn = tot = cnt = 1e18;
    if (!flag1 && !flag2)
      puts("IMPOSSIBLE");
    else if (minn1 < minn)
      tot = tot1, cnt = cnt1, minn = minn1, out(0);
    else
      out(1);
    return 0;
  } else {
    long long tot1 = 1e18, minn1 = 1e18, cnt1 = 1e18;
    bool flag1 = work1(tot, cnt, minn, 0);
    if (flag1) {
      tot1 = tot, cnt1 = cnt, minn1 = minn;
    }
    reverse(a + 1, a + 1 + n);
    for (int i = 1; i <= n; ++i) b[i] = c[i];
    bool flag2 = work1(tot, cnt, minn, 1);
    if (!flag2) minn = tot = cnt = 1e18;
    if (!flag1 && !flag2)
      puts("IMPOSSIBLE");
    else if (minn1 < minn)
      tot = tot1, cnt = cnt1, minn = minn1, out(0);
    else
      out(1);
    return 0;
  }
}
