Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int,string> ii;
- #define N 55
- #define M 21
- #define INF 10000007
- #define PI acos(-1)
- #define rep(i,a,b) for(int i = a; i < b; i++)
- #define reps(i,a,b) for(int i = a; i >= b; i--)
- #define sc scanf
- #define pc printf
- #define pb push_back
- #define F first
- #define S second
- string fir,sec;
- int a,b;
- pair<int,string>dp[N][N][10];
- //0 for '(' started
- //1 for ')' ended
- //2 for '{' started
- //3 for '}' ended
- //4 for '[' started
- //5 for ']' ended
- //6 for nothing has happened till now
- pair<int,string>go(int p,int q,int is)
- {
- if(p == a && q == b){
- if(is == 0) return ii(0,")");
- else if(is == 2) return ii(0,"}");
- else if(is == 4) return ii(0,"]");
- else if(is == 1 || is == 3 || is == 5 || is == 6) return ii(0,"");
- }
- if(p == a){
- string now = "";
- if(is == 0) now = ")[";
- else if(is == 2) now = "}[";
- else if(is == 6) now = "[";
- for(int j = q; j < b; j++){
- now += sec[j];
- }
- now += "]";
- return ii(b-q,now);
- }
- if(q == b){
- string now = "";
- if(is == 0) now = "){";
- else if(is == 4) now = "]{";
- else if(is == 6) now = "{";
- for(int j = p; j < a; j++){
- now += fir[j];
- }
- now += "}";
- return ii(a-p,now);
- }
- pair<int,string> &ret = dp[p][q][is];
- if(ret.F != -1) return ret;
- ret.F = INF;
- ret.S = "";
- pair<int,string>dup;
- string now;
- if(fir[p] == sec[q]){
- dup = go(p+1,q+1,0);
- if(dup.F + 1 < ret.F){
- ret.F = dup.F + 1;
- if(is == 0){
- now = "";now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 1){
- now = "(";
- now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 2){
- now = "}(";now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 3){
- now = "(";now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 4){
- now = "](";now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 5){
- now = "(";now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 6){
- now = "(";
- now += fir[p];
- ret.S = now + dup.S;
- }
- }
- }
- dup = go(p+1,q,2);
- if(dup.F + 1 < ret.F){
- ret.F = dup.F + 1;
- if(is == 0){
- now = "){";
- now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 1){
- now = "{";
- now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 2){
- now = "";
- now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 3){
- now = "{";
- now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 4){
- now = "]{";
- now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 5){
- now = "{";
- now += fir[p];
- ret.S = now + dup.S;
- }
- else if(is == 6){
- now = "{";
- now += fir[p];
- ret.S = now + dup.S;
- }
- }
- dup = go(p,q+1,4);
- if(dup.F + 1 < ret.F){
- ret.F = dup.F + 1;
- if(is == 0){
- now = ")[";
- now += sec[q];
- ret.S = now + dup.S;
- }
- else if(is == 1){
- now = "[";
- now += sec[q];
- ret.S = now + dup.S;
- }
- else if(is == 2){
- now = "}[";
- now += sec[q];
- ret.S = now + dup.S;
- }
- else if(is == 3){
- now = "[";
- now += sec[q];
- ret.S = now + dup.S;
- }
- else if(is == 4){
- now = "";
- now += sec[q];
- ret.S = now + dup.S;
- }
- else if(is == 5){
- now = "[";
- now += sec[q];
- ret.S = now + dup.S;
- }
- else if(is == 6){
- now = "[";
- now += sec[q];
- ret.S = now + dup.S;
- }
- }
- return ret;
- }
- int main()
- {
- int tt = 0;
- int T;
- sc("%d",T);
- while(++tt <= T){
- for(int i = 0; i < 55; i++){
- for(int j = 0; j < 55; j++){
- for(int k = 0;k < 10; k++){
- dp[i][j][k].F = -1;
- dp[i][j][k].S = "";
- }
- }
- }
- cin >> fir >> sec;
- a = fir.size();
- b = sec.size();
- pair<int,string>ans = go(0,0,6);
- pc("Case %d:\n",tt);
- cout << ans.F << "\n" << ans.S << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement