#include <bits/stdc++.h>
using namespace std;
struct mod {
  string cm;
  int pos;
  char ch;
  mod() {}
  mod(string cm, int pos, char ch) : cm(cm), pos(pos), ch(ch) {}
};
int main(int argc, char **argv) {
  string s, t;
  cin >> s >> t;
  int DP[s.length() + 1][t.length() + 1];
  pair<int, int> pre[s.length() + 1][t.length() + 1];
  for (int i = (0); i < (1 + s.length()); ++i)
    for (int j = (0); j < (1 + t.length()); ++j) DP[i][j] = 1 << 29;
  for (int i = (0); i < (1 + s.length()); ++i)
    DP[i][0] = i, pre[i][0] = make_pair(i - 1, 0);
  for (int i = (0); i < (1 + t.length()); ++i)
    DP[0][i] = i, pre[0][i] = make_pair(0, i - 1);
  for (int i = (1); i < (1 + s.length()); ++i)
    for (int j = (1); j < (1 + t.length()); ++j)
      if (s[i - 1] == t[j - 1])
        DP[i][j] = DP[i - 1][j - 1], pre[i][j] = make_pair(i - 1, j - 1);
      else {
        for (int p = (-1); p < (1); ++p)
          for (int q = (-1); q < (1); ++q)
            if (p | q)
              if (DP[i][j] > DP[i + p][j + q] + 1)
                DP[i][j] = DP[i + p][j + q] + 1,
                pre[i][j] = make_pair(i + p, j + q);
      }
  printf("%d\n", DP[s.length()][t.length()]);
  deque<mod> stk;
  int p = s.length(), q = t.length();
  while (p | q) {
    int pp = pre[p][q].first, pq = pre[p][q].second;
    if (p && q && s[p - 1] == t[q - 1]) {
      p = pp, q = pq;
      continue;
    }
    int dp = p - pp, dq = q - pq;
    char pos[30];
    sprintf(pos, "%d", q);
    string cm;
    cm = pos;
    cm = cm;
    if (dp == 1 && dq == 1)
      stk.push_front(mod("REPLACE", q, t[q - 1]));
    else if (dp == 1)
      stk.push_front(mod("DELETE", q + 1, '?'));
    else
      stk.push_front(mod("INSERT", q, t[q - 1]));
    p = pp, q = pq;
  }
  for (int i = (0); i < (stk.size()); ++i) {
    printf("%s %d", stk[i].cm.c_str(), stk[i].pos);
    if (stk[i].cm != "DELETE") printf(" %c", stk[i].ch);
    puts("");
  }
  return 0;
}
