#include <bits/stdc++.h>
using namespace std;
void ONLINE__JUDGE();
pair<long long, long long> swapii(pair<long long, long long> pr) {
  return {pr.second, pr.first};
}
int dx[] = {0, 0, -1, +1, -1, +1, -1, +1};
int dy[] = {-1, +1, 0, 0, -1, +1, +1, -1};
const long long MOD = 1e9 + 7;
const long long MAX = 1e7 + 9;
string a, b;
long long lenA, lenB, dp[1009][1009];
long long go(long long i = 0, long long j = 0) {
  if (i == lenA && j == lenB) return 0;
  if (i == lenA) return lenB - j;
  if (j == lenB) return lenA - i;
  long long& ret = dp[i][j];
  if (~ret) return ret;
  long long mn = (long long)1e18;
  if (a[i] == b[j]) mn = min(mn, go(i + 1, j + 1));
  mn = min(mn, go(i, j + 1) + 1);
  mn = min(mn, go(i + 1, j) + 1);
  mn = min(mn, go(i + 1, j + 1) + 1);
  return ret = mn;
}
void build(long long i = 0, long long j = 0, long long cur = 1) {
  if (i == lenA && j == lenB) return;
  if (i == lenA) {
    for (int k = 0; k < lenB - j; k++, cur++)
      cout << "INSERT " << cur << " " << b[j + k] << "\n";
    return;
  }
  if (j == lenB) {
    for (int k = 0; k < lenA - i; ++k) cout << "DELETE " << cur << "\n";
    return;
  }
  long long mn = (long long)1e18;
  if (a[i] == b[j]) mn = min(mn, go(i + 1, j + 1));
  mn = min(mn, go(i, j + 1) + 1);
  mn = min(mn, go(i + 1, j) + 1);
  mn = min(mn, go(i + 1, j + 1) + 1);
  if (mn == go(i, j + 1) + 1) {
    cout << "INSERT " << cur << " " << b[j] << "\n";
    build(i, j + 1, cur + 1);
  } else if (mn == go(i + 1, j) + 1) {
    cout << "DELETE " << cur << "\n";
    build(i + 1, j, cur);
  } else if (mn == go(i + 1, j + 1) + 1) {
    cout << "REPLACE " << cur << " " << b[j] << "\n";
    build(i + 1, j + 1, cur + 1);
  } else if (mn == go(i + 1, j + 1)) {
    build(i + 1, j + 1, cur + 1);
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  ONLINE__JUDGE();
  cin >> a >> b;
  lenA = a.length();
  lenB = b.length();
  memset(dp, -1, sizeof dp);
  cout << go() << "\n";
  build();
  return 0;
}
void ONLINE__JUDGE() {}
