func_code_string: #include <bits/stdc++.h>   using namespace std;   string s, t;   int dp[1005][1005];   int solve(int i, int j) {     if (i == s.size()) return t.size() - j;     if (j == t.size()) return s.size() - i;     if (dp[i][j] != -1) return dp[i][j];     if (s[i] == t[j]) return solve(i + 1, j + 1);     int c1 = solve(i + 1, j + 1) + 1;     int c2 = solve(i, j + 1) + 1;     int c3 = solve(i + 1, j) + 1;     return dp[i][j] = (min(c1, min(c2, c3)));   }   int shft1 = 0;   void print(int i, int j) {     if (i == s.size()) {       for (int xx = j; xx < t.size(); xx++) {         cout <<  INSERT   << 1 + xx <<     << t[xx] << endl;       }       return;     }     if (j == t.size()) {       for (int xx = 0; xx < s.size() - i; xx++) {         cout <<  DELETE   << j + 1 << endl;       }       return;     }     int c = -2;     if (s[i] == t[j]) {       return print(i + 1, j + 1);     }     int c1 = solve(i + 1, j + 1) + 1;     int c2 = solve(i, j + 1) + 1;     int c3 = solve(i + 1, j) + 1;     int optimal = solve(i, j);     if (optimal == c1) {       cout <<  REPLACE   << j + 1 <<     << t[j] << endl;       print(i + 1, j + 1);     } else if (optimal == c2) {       cout <<  INSERT   << j + 1 <<     << t[j] << endl;       shft1++;       print(i, j + 1);     } else if (optimal == c3) {       cout <<  DELETE   << j + 1 <<     << endl;       shft1--;       print(i + 1, j);     }   }   int main() {     cin >> s >> t;     memset(dp, -1, sizeof dp);     cout << solve(0, 0) << endl;     print(0, 0);     return 0;   }   