#define _USE_MATH_DEFINES #include #include using namespace std; /* #include using namespace atcoder; */ /* #include #include using bll = boost::multiprecision::cpp_int; using bdouble = boost::multiprecision::number>; using namespace boost::multiprecision; */ #if defined(LOCAL_TEST) || defined(LOCAL_DEV) #define BOOST_STACKTRACE_USE_ADDR2LINE #define BOOST_STACKTRACE_ADDR2LINE_LOCATION /usr/local/opt/binutils/bin/addr2line #define _GNU_SOURCE 1 #include #endif #ifdef LOCAL_TEST namespace std { template class dvector : public std::vector { public: using std::vector::vector; template , std::nullptr_t> = nullptr> std::vector::reference operator[](size_t n) { if (this->size() <= n) { std::cerr << boost::stacktrace::stacktrace() << '\n' << "vector::_M_range_check: __n (which is " << n << ") >= this->size() (which is " << this->size() << ")" << '\n'; } return this->at(n); } template , std::nullptr_t> = nullptr> const T_ operator[](size_t n) const { if (this->size() <= n) { std::cerr << boost::stacktrace::stacktrace() << '\n' << "vector::_M_range_check: __n (which is " << n << ") >= this->size() (which is " << this->size() << ")" << '\n'; } return this->at(n); } template , std::nullptr_t> = nullptr> T_& operator[](size_t n) { if (this->size() <= n) { std::cerr << boost::stacktrace::stacktrace() << '\n' << "vector::_M_range_check: __n (which is " << n << ") >= this->size() (which is " << this->size() << ")" << '\n'; } return this->at(n); } template , std::nullptr_t> = nullptr> const T_& operator[](size_t n) const { if (this->size() <= n) { std::cerr << boost::stacktrace::stacktrace() << '\n' << "vector::_M_range_check: __n (which is " << n << ") >= this->size() (which is " << this->size() << ")" << '\n'; } return this->at(n); } }; template, typename Allocator = std::allocator> class dmultiset : public std::multiset { public: using std::multiset::multiset; const typename std::multiset::iterator erase(const typename std::multiset::iterator it) { return std::multiset::erase(it); } size_t erase([[maybe_unused]] const T& x) { std::cerr << boost::stacktrace::stacktrace() << '\n'; assert(false); } size_t erase_all_elements(const T& x) { return std::multiset::erase(x); } }; } #define vector dvector #define multiset dmultiset class SIGFPE_exception : std::exception {}; class SIGSEGV_exception : std::exception {}; void catch_SIGFPE([[maybe_unused]] int e) { std::cerr << boost::stacktrace::stacktrace() << '\n'; throw SIGFPE_exception(); } void catch_SIGSEGV([[maybe_unused]] int e) { std::cerr << boost::stacktrace::stacktrace() << '\n'; throw SIGSEGV_exception(); } signed convertedmain(); signed main() { signal(SIGFPE, catch_SIGFPE); signal(SIGSEGV, catch_SIGSEGV); return convertedmain(); } #define main() convertedmain() #else #define erase_all_elements erase #endif #ifdef LOCAL_DEV template std::ostream& operator<<(std::ostream& s, const std::pair& p) { return s << "(" << p.first << ", " << p.second << ")"; } template std::ostream& operator<<(std::ostream& s, const std::array& a) { s << "{ "; for (size_t i = 0; i < N; ++i){ s << a[i] << "\t"; } s << "}"; return s; } template std::ostream& operator<<(std::ostream& s, const std::set& se) { s << "{ "; for (auto itr = se.begin(); itr != se.end(); ++itr){ s << (*itr) << "\t"; } s << "}"; return s; } template std::ostream& operator<<(std::ostream& s, const std::multiset& se) { s << "{ "; for (auto itr = se.begin(); itr != se.end(); ++itr){ s << (*itr) << "\t"; } s << "}"; return s; } template std::ostream& operator<<(std::ostream& s, const std::map& m) { s << "{\n"; for (auto itr = m.begin(); itr != m.end(); ++itr){ s << "\t" << (*itr).first << " : " << (*itr).second << "\n"; } s << "}"; return s; } template std::ostream& operator<<(std::ostream& s, const std::deque& v) { for (size_t i = 0; i < v.size(); ++i){ s << v[i]; if (i < v.size() - 1) s << "\t"; } return s; } template std::ostream& operator<<(std::ostream& s, const std::vector& v) { for (size_t i = 0; i < v.size(); ++i){ s << v[i]; if (i < v.size() - 1) s << "\t"; } return s; } template std::ostream& operator<<(std::ostream& s, const std::vector>& vv) { s << "\\\n"; for (size_t i = 0; i < vv.size(); ++i){ s << vv[i] << "\n"; } return s; } #if __has_include() template std::ostream& operator<<(std::ostream& s, const __gnu_pbds::tree& se) { s << "{ "; for (auto itr = se.begin(); itr != se.end(); ++itr){ s << (*itr) << "\t"; } s << "}"; return s; } template std::ostream& operator<<(std::ostream& s, const __gnu_pbds::gp_hash_table& m) { s << "{\n"; for (auto itr = m.begin(); itr != m.end(); ++itr){ s << "\t" << (*itr).first << " : " << (*itr).second << "\n"; } s << "}"; return s; } #endif void debug_impl() { std::cerr << '\n'; } template void debug_impl(Head head, Tail... tail) { std::cerr << " " << head << (sizeof...(tail) ? "," : ""); debug_impl(tail...); } #define debug(...) do { std::cerr << ":" << __LINE__ << " (" << #__VA_ARGS__ << ") ="; debug_impl(__VA_ARGS__); } while (false) constexpr inline long long prodlocal([[maybe_unused]] long long prod, [[maybe_unused]] long long local) { return local; } #else #define debug(...) do {} while (false) constexpr inline long long prodlocal([[maybe_unused]] long long prod, [[maybe_unused]] long long local) { return prod; } #endif //#define int long long using ll = long long; //INT_MAX = (1<<31)-1 = 2147483647, INT64_MAX = (1LL<<63)-1 = 9223372036854775807 constexpr ll INF = std::numeric_limits::max() == INT_MAX ? (ll)1e9 + 7 : (ll)1e18; constexpr ll MOD = (ll)1e9 + 7; //primitive root = 5 //constexpr ll MOD = 998244353; //primitive root = 3 constexpr double EPS = 1e-9; constexpr ll dx[4] = {1, 0, -1, 0}; constexpr ll dy[4] = {0, 1, 0, -1}; constexpr ll dx8[8] = {1, 0, -1, 0, 1, 1, -1, -1}; constexpr ll dy8[8] = {0, 1, 0, -1, 1, -1, 1, -1}; #define rep(i, n) for(ll i=0, i##_length=(n); i< i##_length; ++i) #define repeq(i, n) for(ll i=1, i##_length=(n); i<=i##_length; ++i) #define rrep(i, n) for(ll i=(n)-1; i>=0; --i) #define rrepeq(i, n) for(ll i=(n) ; i>=1; --i) #define all(v) (v).begin(), (v).end() #define rall(v) (v).rbegin(), (v).rend() void p() { std::cout << '\n'; } template void p(Head head, Tail... tail) { std::cout << head << (sizeof...(tail) ? " " : ""); p(tail...); } template inline void pv(std::vector& v) { for(ll i=0, N=v.size(); i inline bool chmax(T& a, T b) { return a < b && (a = b, true); } template inline bool chmin(T& a, T b) { return a > b && (a = b, true); } template inline void uniq(std::vector& v) { std::sort(v.begin(), v.end()); v.erase(std::unique(v.begin(), v.end()), v.end()); } template inline ll sz(T& v) { return v.size(); } template std::vector make_vector_impl(std::vector& sizes, typename std::enable_if<(N==1), T const&>::type x) { return std::vector(sizes.front(),x); } template auto make_vector_impl(std::vector& sizes, typename std::enable_if<(N>1), T const&>::type x) { ll size=sizes.back(); sizes.pop_back(); return std::vector(sizes,x))>(size,make_vector_impl(sizes,x)); } template auto make_vector(ll const (&sizes)[N], T const& x=T()) { std::vector s(N); for(size_t i=0; i(s,x); } template struct Indexer { struct iterator { ll _pos; typename T::iterator _it; iterator(typename T::iterator it): _pos(0), _it(it) {} std::pair::reference> operator*() const { return {_pos, *_it}; } iterator& operator++() { ++_pos; ++_it; return *this; } iterator operator++(int) { iterator tmp(*this); ++*this; return tmp; } bool operator==(iterator const& it) const { return _it == it._it; } bool operator!=(iterator const& it) const { return !(*this == it); } }; T& _container; Indexer(T& t): _container(t) {} iterator begin() const { return iterator(_container.begin()); } iterator end() const { return iterator(_container.end()); } }; template Indexer indexer(T& t) { return Indexer(t); } #define repv(i, val, v) for(auto&& [i, val] : indexer(v)) #if __has_include() template , typename std::enable_if_t, std::nullptr_t> = nullptr> struct fmap : public __gnu_pbds::gp_hash_table { using __gnu_pbds::gp_hash_table::gp_hash_table; template fmap(std::initializer_list> il) : __gnu_pbds::gp_hash_table() { for (auto&& x : il) __gnu_pbds::gp_hash_table::insert(std::pair(*x.begin(), *(x.begin() + 1))); } template ll count(const T& x) const { return __gnu_pbds::gp_hash_table::find(x) != __gnu_pbds::gp_hash_table::end(); } }; #else template using fmap = std::map; #endif /*-----8<-----template-----8<-----*/ /*-----8<-----library-----8<-----*/ void solve() { ll N; cin >> N; deque a(N), b(N); rep(i, N) cin >> a[i]; rep(i, N) cin >> b[i]; vector ans; vector v; auto g = [&](ll i, ll c) { rep(_, abs(a[i]-b[i])){ ans.push_back(i+1); v.push_back(c==1 ? 'L' : 'R'); } }; auto f = [&](ll l, ll r, ll c) -> void { debug(l, r, c); if (c == 1){ for (ll i = l; i<=r ; i++){ g(i, c); } }else if(c==-1){ for (ll i = r; i>=l ; i--){ g(i, c); } } }; ll t = 0; ll index = 0; rep(i, N) { if(a[i]==b[i]){ f(index, i-1, t); index = i+1; t = 0; continue; } if(a[i]>b[i]){ if(t==-1){ f(index, i-1, t); index = i; } t = 1; } else { if(t==1){ f(index, i-1, t); index = i; } t = -1; } } f(index, N - 1, t); p(ans.size()); rep(i,ans.size()){ p(ans[i], v[i]); } } signed main() { #ifndef LOCAL_DEV std::cin.tie(nullptr); std::ios::sync_with_stdio(false); #endif //ll Q; cin >> Q; while(Q--)solve(); solve(); return 0; }