#include <bits/stdc++.h>
using namespace std;
inline void fileio(const char* in, const char* out) {
  freopen(in, "r", stdin);
  freopen(out, "w", stdout);
}
using ll = long long;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
const char nl = '\n';
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3fll;
const ld EPS = 1e-9, PI = acos(-1);
const int N = 2e5 + 5;
int n;
ll a[N], b[N];
bool eq() {
  for (int i = 0; i < n; ++i) {
    if (a[i] != b[i]) return false;
  }
  return true;
}
bool rev_eq() {
  for (int i = 0; i < n; ++i) {
    if (a[i] != b[n - i - 1]) return false;
  }
  return true;
}
bool inc() {
  for (int i = 0; i < n - 1; ++i) {
    if (b[i] >= b[i + 1]) return false;
  }
  return true;
}
void undo() {
  for (int i = n; i-- > 1;) {
    b[i] -= b[i - 1];
  }
}
bool dec() {
  for (int i = 0; i < n - 1; ++i) {
    if (b[i] <= b[i + 1]) return false;
  }
  return true;
}
void rev() { reverse(b, b + n); }
void solve2() {
  string ans;
  ll t1 = 0, t2 = 0;
  bool reva = a[0] > a[1];
  if (reva) swap(a[0], a[1]);
  bool revb = b[0] > b[1];
  if (revb) swap(b[0], b[1]);
  while (a[0] != b[0]) {
    if (b[0] == 0) {
      cerr << 61 << nl;
      cout << "IMPOSSIBLE\n";
      return;
    }
    ll k = b[1] / b[0];
    if (k == 0) {
      cerr << 67 << nl;
      cout << "IMPOSSIBLE\n";
      return;
    }
    b[1] -= k * b[0];
    t2 += k;
    if (t2 <= 2e5) {
      ans.append(k, 'P');
      ans += 'R';
    }
    t1++;
    swap(b[0], b[1]);
    assert(b[0] < b[1]);
  }
  if (b[1] < a[1]) {
    cerr << 82 << nl;
    cout << "IMPOSSIBLE\n";
    return;
  }
  ll lo = 0;
  ll hi = 1e13;
  while (lo + 1 < hi) {
    ll mid = (lo + hi) / 2;
    if (a[1] + a[0] * mid <= b[1]) {
      lo = mid;
    } else {
      hi = mid;
    }
  }
  if (a[1] + a[0] * lo == b[1]) {
    t2 += lo;
    if (t2 <= 2e5) {
      ans.append(lo, 'P');
    }
  } else {
    cerr << 102 << nl;
    cout << "IMPOSSIBLE\n";
    return;
  }
  if (reva) {
    t1++;
    ans += 'R';
  }
  reverse(ans.begin(), ans.end());
  if (revb) {
    t1++;
    ans += 'R';
  }
  if (t2 > 2e5) {
    cout << "BIG\n" << t2 << nl;
  } else {
    cout << "SMALL\n" << t1 + t2 << nl << ans << nl;
  }
}
void solve() {
  string ans;
  ll t1 = 0, t2 = 0;
  while (1) {
    if (eq()) {
      break;
    } else if (rev_eq()) {
      ans += 'R';
      t1++;
      break;
    } else if (inc()) {
      t2++;
      ans += 'P';
      undo();
    } else if (dec()) {
      rev();
      ans += 'R';
      t1++;
    } else {
      cout << "IMPOSSIBLE\n";
      return;
    }
  }
  if (t2 > 2e5) {
    cout << "BIG\n";
    cout << t2 << nl;
  } else {
    cout << "SMALL\n";
    cout << t1 + t2 << nl;
    reverse(ans.begin(), ans.end());
    cout << ans << nl;
  }
}
int main() {
  atexit([]() { cerr << "Time: " << (ld)clock() / CLOCKS_PER_SEC << nl; });
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(12);
  cin >> n;
  for (int i = 0; i < n; ++i) cin >> a[i];
  for (int i = 0; i < n; ++i) cin >> b[i];
  if (n == 1) {
    if (a[0] == b[0]) {
      cout << "SMALL\n0\n";
    } else {
      cout << "IMPOSSIBLE\n";
    }
  } else if (n == 2) {
    solve2();
  } else {
    solve();
  }
  return 0;
}
