<p><strong>Special binary strings</strong> are binary strings with the following two properties:</p>

<ul>
	<li>The number of <code>0</code>&#39;s is equal to the number of <code>1</code>&#39;s.</li>
	<li>Every prefix of the binary string has at least as many <code>1</code>&#39;s as <code>0</code>&#39;s.</li>
</ul>

<p>You are given a <strong>special binary</strong> string <code>s</code>.</p>

<p>A move consists of choosing two consecutive, non-empty, special substrings of <code>s</code>, and swapping them. Two strings are consecutive if the last character of the first string is exactly one index before the first character of the second string.</p>

<p>Return <em>the lexicographically largest resulting string possible after applying the mentioned operations on the string</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;11011000&quot;
<strong>Output:</strong> &quot;11100100&quot;
<strong>Explanation:</strong> The strings &quot;10&quot; [occuring at s[1]] and &quot;1100&quot; [at s[3]] are swapped.
This is the lexicographically largest string possible after some number of swaps.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;10&quot;
<strong>Output:</strong> &quot;10&quot;
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= s.length &lt;= 50</code></li>
	<li><code>s[i]</code> is either <code>&#39;0&#39;</code> or <code>&#39;1&#39;</code>.</li>
	<li><code>s</code> is a special binary string.</li>
</ul>

class Solution {
public:
    void rec(string &s, int start, int end){
        if(start>=end){
            return;
        }
        // cout<<start<<" "<<end<<"\n";
        int st=start,en,c0=0,c1=0;
        for(int i=start;i<=end;i++){
            if(s[i]=='0'){
                c0++;
            }
            else{
                c1++;
            }
            if(c0==c1){
                en = i;
                rec(s,st+1,en-1);
                st = en+1;
            }
        }
        c0=0;
        c1=0;
        vector<string> v;
        string str="";
        for(int i=start;i<=end;i++){
            if(s[i]=='0'){
                c0++;
            }
            else{
                c1++;
            }
            str.push_back(s[i]);
            if(c0==c1){
                v.push_back(str);
                str = "";
            }
        }
        // for(auto &el: v){
        //     cout<<el<<" ";
        // }
        // cout<<":";
        sort(v.begin(),v.end(),greater<string>());
        // for(auto &el: v){
        //     cout<<el<<" ";
        // }
        // cout<<"\n";
        int i=start;
        for(auto &el: v){
            for(char &ch: el){
                s[i] = ch;
                i++;
            }
        }
    }
    string makeLargestSpecial(string s) {
        rec(s,0,s.length()-1);
        return s;
    }
};
8500