<p>A string <code>s</code> is called <strong>happy</strong> if it satisfies the following conditions:</p>

<ul>
	<li><code>s</code> only contains the letters <code>&#39;a&#39;</code>, <code>&#39;b&#39;</code>, and <code>&#39;c&#39;</code>.</li>
	<li><code>s</code> does not contain any of <code>&quot;aaa&quot;</code>, <code>&quot;bbb&quot;</code>, or <code>&quot;ccc&quot;</code> as a substring.</li>
	<li><code>s</code> contains <strong>at most</strong> <code>a</code> occurrences of the letter <code>&#39;a&#39;</code>.</li>
	<li><code>s</code> contains <strong>at most</strong> <code>b</code> occurrences of the letter <code>&#39;b&#39;</code>.</li>
	<li><code>s</code> contains <strong>at most</strong> <code>c</code> occurrences of the letter <code>&#39;c&#39;</code>.</li>
</ul>

<p>Given three integers <code>a</code>, <code>b</code>, and <code>c</code>, return <em>the <strong>longest possible happy </strong>string</em>. If there are multiple longest happy strings, return <em>any of them</em>. If there is no such string, return <em>the empty string </em><code>&quot;&quot;</code>.</p>

<p>A <strong>substring</strong> is a contiguous sequence of characters within a string.</p>

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

<pre>
<strong>Input:</strong> a = 1, b = 1, c = 7
<strong>Output:</strong> &quot;ccaccbcc&quot;
<strong>Explanation:</strong> &quot;ccbccacc&quot; would also be a correct answer.
</pre>

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

<pre>
<strong>Input:</strong> a = 7, b = 1, c = 0
<strong>Output:</strong> &quot;aabaa&quot;
<strong>Explanation:</strong> It is the only correct answer in this case.
</pre>

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

<ul>
	<li><code>0 &lt;= a, b, c &lt;= 100</code></li>
	<li><code>a + b + c &gt; 0</code></li>
</ul>

class Solution {
public:
    string longestDiverseString(int a, int b, int c) {

        priority_queue<pair<int,char>>pq;
        string resultString;
        vector<pair<int,char>> result;
        if ( a>0)pq.push({a,'a'});
        if ( b>0)pq.push({b,'b'});
        if ( c>0)pq.push({c,'c'});

        while(pq.size()>0)
        {
            if (pq.size()==1 && result.size()>=1 &&  result[result.size()-1].first==2 &&  result[result.size()-1].second == pq.top().second ) break;
            vector<pair<int,char>> temp;
            auto x= pq.top();
            if (result.size()==0 || result[result.size()-1].second != x.second)
            {
                if (x.first==1) {result.push_back({1,x.second});}
                else {
                    result.push_back({2,x.second});
                }
                x.first-=2;
                if (x.first>0) temp.push_back(x);
            pq.pop();
            }
            else if (result[result.size()-1].second == x.second && result[result.size()-1].first==1)
            {
                    result.push_back({1,x.second});
                    x.first-=1;
                if (x.first>0) temp.push_back(x);
            pq.pop();
            }
            
            if (pq.size()>0)
            {
                auto y= pq.top();
                result.push_back({1,y.second});
                y.first-=1;
                if (y.first>0) temp.push_back(y);
                pq.pop();
            }
            for(auto x: temp)
            {
                pq.push(x);
            }
             
        }

       for(auto x: result)
            {
                if (x.first ==2) resultString+=x.second;
                resultString+=x.second;
                
            }

            return resultString;

        
    }
};
8100