#include <bits/stdc++.h>
using namespace std;
const long long MOD = (long long)1e9 + 7;
const long long MOD1 = 2286661337;
const long long MOD2 = 998244353;
const int INF = (int)1e9 + 7;
const double EPS = 1e-7;
const int N = (int)2e5;
int n;
long long a[N], b[N];
bool is_same_() {
  for (int i = 0; i < n; ++i) {
    if (a[i] != b[i]) {
      return false;
    }
  }
  return true;
}
bool is_up() {
  for (int i = 1; i < n; ++i) {
    if (b[i] <= b[i - 1]) {
      return false;
    }
  }
  return true;
}
bool is_down() {
  for (int i = 1; i < n; ++i) {
    if (b[i] >= b[i - 1]) {
      return false;
    }
  }
  return true;
}
bool is_bad() {
  for (int i = 0; i < n; ++i) {
    if (b[i] <= 0) {
      return true;
    }
  }
  return false;
}
bool is_rev_same() {
  for (int i = 0; i < n; ++i) {
    if (a[i] != b[n - 1 - i]) {
      return false;
    }
  }
  return true;
}
bool is_uncomp() {
  for (int i = 0; i < n; ++i) {
    if (a[i] > b[i]) {
      return true;
    }
  }
  return false;
}
void solve() {
  int cnt = 0;
  string ans;
  int prev_ = -1;
  while (!is_same_()) {
    if (is_rev_same()) {
      ans.push_back('R');
      break;
    }
    if (is_bad()) {
      cnt = -1;
      break;
    }
    if (is_up()) {
      for (int i = n - 1; i >= 0; --i) {
        b[i] = (i ? b[i] - b[i - 1] : b[i]);
      }
      if (prev_ != 0) {
        if (prev_ != -1) {
          ans.push_back('R');
        }
        prev_ = 0;
      }
      ans.push_back('P');
    } else if (is_down()) {
      for (int i = 0; i < n; ++i) {
        b[i] = (i == n - 1 ? b[i] : b[i] - b[i + 1]);
      }
      if (prev_ != 1) {
        ans.push_back('R');
        prev_ = 1;
      }
      ans.push_back('P');
    } else {
      cnt = -1;
      break;
    }
    ++cnt;
  }
  if (prev_ == 1) {
    ans.push_back('R');
  }
  reverse(ans.begin(), ans.end());
  if (cnt == -1) {
    printf("IMPOSSIBLE");
  } else if (cnt > N) {
    printf("BIG\n%d", cnt);
  } else {
    printf("SMALL\n%d\n%s", ans.size(), ans.c_str());
  }
}
signed main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%lld", &a[i]);
  }
  for (int i = 0; i < n; ++i) {
    scanf("%lld", &b[i]);
  }
  if (n == 1) {
    if (a[0] == b[0]) {
      printf("SMALL\n0");
    } else {
      printf("IMPOSSIBLE");
    }
  } else if (n == 2) {
    long long cnt = 0;
    int prev_ = -1;
    string ans = "";
    while (!is_same_()) {
      if (is_rev_same()) {
        ans.push_back('R');
        break;
      }
      if (is_uncomp()) {
        ans.push_back('R');
        reverse(b, b + n);
        if (is_uncomp()) {
          cnt = -1;
          break;
        }
      }
      long long x = b[0], y = b[1];
      if (x <= 0 || y <= 0) {
        cnt = -1;
        break;
      }
      if (x < y) {
        if (prev_ != 0) {
          if (prev_ != -1) {
            ans.push_back('R');
          }
          prev_ = 0;
        }
        long long cur_cnt = y / x;
        if (x == a[0]) {
          cur_cnt = min(cur_cnt, (y - a[1] + x - 1) / x);
        }
        if (ans.size() + cur_cnt <= N) {
          for (int i = 0; i < cur_cnt; ++i) {
            ans.push_back('P');
          }
        }
        cnt += cur_cnt;
        y -= x * cur_cnt;
      } else if (x > y) {
        if (prev_ != 1) {
          ans.push_back('R');
          prev_ = 1;
        }
        long long cur_cnt = x / y;
        if (y == a[1]) {
          cur_cnt = min(cur_cnt, (x - a[0] + y - 1) / y);
        }
        if (ans.size() + cur_cnt <= N) {
          for (int i = 0; i < cur_cnt; ++i) {
            ans.push_back('P');
          }
        }
        cnt += cur_cnt;
        x -= y * cur_cnt;
      } else {
        cnt = -1;
        break;
      }
      b[0] = x, b[1] = y;
    }
    if (prev_ == 1) {
      ans.push_back('R');
    }
    reverse(ans.begin(), ans.end());
    if (cnt == -1) {
      printf("IMPOSSIBLE");
    } else if (cnt > N) {
      printf("BIG\n%lld", cnt);
    } else {
      printf("SMALL\n%d\n%s", ans.size(), ans.c_str());
    }
  } else {
    solve();
  }
  return 0;
}
