#include <bits/stdc++.h>
using namespace std;
int const bound = 1e6 + 2, N = 5e5 + 2;
long long OO = 1e18;
double eps = 1e-6;
int oo = 1e9, mod = oo + 7;
string a, b;
int dp[1001][1001];
vector<string> ins;
int rec(int i, int j) {
  int &ret = dp[i][j];
  if (ret != -1) return ret;
  if (i == (int)a.size() && j == (int)b.size()) return ret = 0;
  if (i == (int)a.size()) return ret = rec(i, j + 1) + 1;
  if (j == (int)b.size()) return ret = rec(i + 1, j) + 1;
  int u = 1;
  if (b[j] == a[i]) u = 0;
  return ret = min(min(rec(i + 1, j) + 1, rec(i + 1, j + 1) + u),
                   rec(i, j + 1) + 1);
}
void print(int i, int j, int act) {
  if (i == (int)a.size() && j == (int)b.size()) return;
  if (i == (int)a.size()) {
    while (j < (int)b.size()) {
      cout << "INSERT " << act << ' ' << b[j] << endl;
      j++;
      act++;
    }
    return;
  }
  if (j == (int)b.size()) {
    while (i < (int)a.size()) {
      cout << "DELETE " << act << endl;
      i++;
    }
    return;
  }
  int u = 1;
  if (b[j] == a[i]) u = 0;
  int r1 = rec(i + 1, j) + 1, r2 = rec(i + 1, j + 1) + u,
      r3 = rec(i, j + 1) + 1;
  if (r1 <= r2 && r1 <= r3) {
    cout << "DELETE " << act << endl;
    print(i + 1, j, act);
  } else if (r2 <= r1 && r2 <= r3) {
    if (b[j] == a[i]) {
      print(i + 1, j + 1, act + 1);
      return;
    }
    cout << "REPLACE " << act << ' ' << b[j] << endl;
    print(i + 1, j + 1, act + 1);
  } else {
    cout << "INSERT " << act << ' ' << b[j] << endl;
    print(i, j + 1, act + 1);
  }
}
int main() {
  cin >> a >> b;
  memset(dp, -1, sizeof dp);
  cout << rec(0, 0) << endl;
  print(0, 0, 1);
  return 0;
}
