#include <bits/stdc++.h>
using namespace std;
const long long OO = 1e7;
const long long mod = 1e9 + 7;
const long double EPS = (1e-18);
int dcmp(long double x, long double y) {
  return fabs(x - y) <= EPS ? 0 : x < y ? -1 : 1;
}
int dx[] = {0, 0, 1, -1, 1, 1, -1, -1};
int dy[] = {1, -1, 0, 0, -1, 1, 1, -1};
void fast() {
  std::ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
}
const int MAX = 200 * 1000 + 1;
string a, b;
int mem[1001][1001];
int rec(int i, int j) {
  if (i == a.size() || j == b.size()) {
    return (a.size() - i + b.size() - j);
  }
  int &ret = mem[i][j];
  if (ret != -1) return ret;
  ret = 1e6;
  if (a[i] == b[j]) {
    ret = min(ret, rec(i + 1, j + 1));
  } else {
    ret = min(ret, rec(i, j + 1) + 1);
    ret = min(ret, rec(i + 1, j) + 1);
    ret = min(ret, rec(i + 1, j + 1) + 1);
  }
  return ret;
}
int cnt = 0;
void build(int i, int j) {
  if (i == a.size() || j == b.size()) {
    int tmpi = i + 1 + cnt;
    while (i < a.size()) {
      cout << "DELETE " << tmpi << endl;
      i++;
    }
    while (j < b.size()) {
      cout << "INSERT " << i + 1 + cnt << " " << b[j] << endl;
      j++;
      cnt++;
    }
    return;
  }
  if (a[i] == b[j]) {
    if (rec(i + 1, j + 1) == mem[i][j]) {
      build(i + 1, j + 1);
    }
  } else {
    if (rec(i, j + 1) + 1 == mem[i][j]) {
      cout << "INSERT " << i + 1 + cnt << " " << b[j] << endl;
      cnt++;
      build(i, j + 1);
      return;
    }
    if (rec(i + 1, j) + 1 == mem[i][j]) {
      cout << "DELETE " << i + 1 + cnt << endl;
      cnt--;
      build(i + 1, j);
      return;
    }
    if (rec(i + 1, j + 1) + 1 == mem[i][j]) {
      cout << "REPLACE " << i + 1 + cnt << " " << b[j] << endl;
      build(i + 1, j + 1);
      return;
    }
  }
}
int main() {
  fast();
  memset(mem, -1, sizeof mem);
  cin >> a >> b;
  cout << rec(0, 0) << endl;
  build(0, 0);
  return 0;
}
