func_code_string: #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);   }   