#include using namespace std; #define rep(i,a,b) for (int i = (a); i < (b);++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() #define fo(i, n) for(int i=0;i<(n);i++) typedef long long ll; typedef pair pii; typedef vector vi; const int NMAX = 2123; char a[NMAX]; char b[NMAX]; #define OUT(a...) {char outs[100]; sprintf(outs, a); out.push_back(outs);} map, vector> s; int ps(char x){ return x=='M'?-1:x=='C'?1:0;} int get(vector &vec){int r = vec[vec.size()-1]; vec.pop_back(); return r;} signed main() { int n; int cur; int on_board=0; scanf("%d %s %s", &n, a, b); fo(i,n) { s[{ps(b[i]), ps(a[i])}].push_back(i+1); } for(int startm=-1; startm <= 2; startm+=2){ vector out; if(!s[{startm, 0}].size()) goto next; OUT("DRIVE %d", cur=get(s[{startm, 0}])); OUT("PICKUP"); on_board=startm; while(s[{-on_board, on_board}].size()) { OUT("DRIVE %d", cur=get(s[{-on_board, on_board}])); OUT("DROPOFF"); OUT("PICKUP"); on_board = -on_board; } if(s[{0, on_board}].size()) { OUT("DRIVE %d", cur=get(s[{0, on_board}])); OUT("DROPOFF"); } else out.pop_back(); on_board = 0; for(int x=-1; x <= 2; x+=2){ while(s[{-x, x}].size()) { if(!s[{x, 0}].size()) goto next; OUT("DRIVE %d", cur=get(s[{x, 0}])); OUT("PICKUP"); OUT("DRIVE %d", cur=get(s[{-x, x}])); OUT("DROPOFF"); OUT("PICKUP"); if(s[{0, -x}].size()) { OUT("DRIVE %d", cur=get(s[{0, -x}])); OUT("DROPOFF"); } else out.pop_back(); } } for(int x=-1; x <= 2; x+=2){ while(s[{0, x}].size()) { if(!s[{x, 0}].size()) goto next; OUT("DRIVE %d", cur=get(s[{x, 0}])); OUT("PICKUP"); OUT("DRIVE %d", cur=get(s[{0, x}])); OUT("DROPOFF"); } } printf("%d\n", int(out.size())); for(string s: out) printf("%s\n", s.c_str()); return 0; next:; } printf("%d\n", 0); return 0; }