<p>Given an array <code>arr</code> of 4 digits, find the latest 24-hour time that can be made using each digit <strong>exactly once</strong>.</p>

<p>24-hour times are formatted as <code>&quot;HH:MM&quot;</code>, where <code>HH</code> is between <code>00</code> and <code>23</code>, and <code>MM</code> is between <code>00</code> and <code>59</code>. The earliest 24-hour time is <code>00:00</code>, and the latest is <code>23:59</code>.</p>

<p>Return <em>the latest 24-hour time in <code>&quot;HH:MM&quot;</code> format</em>. If no valid time can be made, return an empty string.</p>

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

<pre>
<strong>Input:</strong> arr = [1,2,3,4]
<strong>Output:</strong> &quot;23:41&quot;
<strong>Explanation:</strong> The valid 24-hour times are &quot;12:34&quot;, &quot;12:43&quot;, &quot;13:24&quot;, &quot;13:42&quot;, &quot;14:23&quot;, &quot;14:32&quot;, &quot;21:34&quot;, &quot;21:43&quot;, &quot;23:14&quot;, and &quot;23:41&quot;. Of these times, &quot;23:41&quot; is the latest.
</pre>

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

<pre>
<strong>Input:</strong> arr = [5,5,5,5]
<strong>Output:</strong> &quot;&quot;
<strong>Explanation:</strong> There are no valid 24-hour times as &quot;55:55&quot; is not valid.
</pre>

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

<ul>
	<li><code>arr.length == 4</code></li>
	<li><code>0 &lt;= arr[i] &lt;= 9</code></li>
</ul>

class Solution {
public:
    
    
    bool isValidTime( pair< int, int > time  ) {
        if ( time.first >= 0 and time.first < 24 and time.second >=0 and time.second < 60 ) return true;
        return false;
    }
    
    pair< int, int > getLatestTime( pair< int, int > t1, pair< int, int > t2 ) {
        
        if ( t1.first == t2.first ){
            if( t1.second > t2.second ) {
                return t1;
            }
            return t2;
        } else if ( t1.first > t2.first ) {
            return t1;
        }
        return t2;
    }
    
    string largestTimeFromDigits(vector<int>& arr) {
        bool flag = true;
        pair< int,int > ans;
        for ( int i = 0; i< 4; i++ ) {
            for ( int j = 0; j<4; j++ ){
                for ( int k=0; k<4; k++ ){
                    for ( int l = 0; l<4; l++ ) {
                        if ( i != j and i != k and i != l and j != k and j != l and k != l  ) {
                            
                            int h = arr[i]*10 + arr[j];
                            int m = arr[k]*10 + arr[l];
                            
                            if ( isValidTime( {h,m} ) ) {
                                
                                if ( flag ){
                                    flag = false;
                                    ans = {h,m};
                                } else {
                                    ans = getLatestTime( ans, {h,m} );
                                }
                            }
                            
                        }
                        
                    }
                }
            }
        }
        
        if ( flag ) return "";
        string anString = "";
        if ( ans.first < 10 ) anString += "0";
        anString += to_string( ans.first );
        anString += ":";
        if ( ans.second < 10 ) anString +=  "0";
        anString += to_string( ans.second );
        return anString;
    }
};
11500