#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll OO = 1e18;
int di[8] = {0, 0, 1, -1, -1, 1, -1, 1};
int dj[8] = {1, -1, 0, 0, 1, 1, -1, -1};
string ys = "YES", no = "NO";
void fast() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
}
string s1, s2;
int n, m, idx_shift;
const int N = 1001;
int mem[N][N];
int dp(int i, int j) {
  if (i == s1.size()) return s2.size() - j;
  if (j == s2.size()) return s1.size() - i;
  int &rt = mem[i][j];
  if (~rt) return rt;
  if (s1[i] == s2[j]) return rt = dp(i + 1, j + 1);
  int choice1 = 1 + dp(i, j + 1);
  int choice2 = 1 + dp(i + 1, j);
  int choice3 = 1 + dp(i + 1, j + 1);
  return rt = min({choice1, choice2, choice3});
}
void build(int i, int j) {
  if (i == s1.size()) {
    int to_add = s2.size() - j;
    for (int k = 0; k < to_add; k++)
      cout << "INSERT " << i + k + 1 + idx_shift << " " << s2[k + j] << '\n';
    idx_shift += to_add;
    return;
  }
  if (j == s2.size()) {
    int to_delete = s1.size() - i;
    for (int k = 0; k < to_delete; k++) {
      cout << "DELETE " << i + k + 1 + idx_shift << '\n';
      --idx_shift;
    }
    return;
  }
  if (s1[i] == s2[j]) {
    build(i + 1, j + 1);
    return;
  }
  int choice1 = 1 + dp(i, j + 1);
  int choice2 = 1 + dp(i + 1, j);
  int choice3 = 1 + dp(i + 1, j + 1);
  int optimal = dp(i, j);
  if (choice1 == optimal) {
    cout << "INSERT " << i + 1 + idx_shift << " " << s2[j] << '\n';
    ++idx_shift;
    build(i, j + 1);
  } else if (choice2 == optimal) {
    cout << "DELETE " << i + 1 + idx_shift << '\n';
    --idx_shift;
    build(i + 1, j);
  } else {
    cout << "REPLACE " << i + 1 + idx_shift << " " << s2[j] << '\n';
    build(i + 1, j + 1);
  }
}
int main() {
  fast();
  cin >> s1 >> s2;
  memset(mem, -1, sizeof mem);
  cout << dp(0, 0) << '\n';
  idx_shift = 0;
  build(0, 0);
}
