Problem: 2050D - Digital string maximization
Language: c++17 

Solution 1 (runtime: 109 ms):
#include<bits/stdc++.h>

using namespace std;



int main() {

int t;cin>>t;

while(t--) {

string s;cin>>s;

int n=s.size();

for(int i=0;i<n;i++) {

int num=s[i]-'0';

int best=num;

int k=i;

for(int j=i;j<min(n,i+10);j++){

int a=s[j]-'0';

a=a-(j-i);

if(a>best){best=a;k=j;}

}



while(k>i){

swap(s[k],s[k-1]);

k--;

}

s[i]=best+'0';

}

cout<<s<<endl;

}

}

Solution 2 (runtime: 61 ms):
#include<bits/stdc++.h>

// #include <ext/pb_ds/assoc_container.hpp>

// #include <ext/pb_ds/tree_policy.hpp>

// using namespace __gnu_pbds;

using namespace std;

// typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds; // *find_by_order, order_of_key

// typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> pbds; // *find_by_order, order_of_key

#define FastIO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

#define Precision cout.precision(10); cout.setf(ios::fixed, ios::floatfield);

#define int long long

#define ld long double

#define allarr arr, arr+n

#define allvec vec.begin(), vec.end()

#define pb push_back

#define pp pop_back

#define vi vector<int>

#define vd vector<ld>

#define mii map<int, int>

#define pii pair<int, int>

#define si set<int>

#define qi queue<int>

#define endl "\n"

#define inf LLONG_MAX

#define eps 1e-6

#define pi 3.14159265358979323846264338327950



const int mod=1e9+7;



// int N=1e7+10;

// vector<bool>isprime(N, true);

// void sieve(){

//     isprime[0]=isprime[1]=false;

//     for(int i=2; i<N; i++){

//         if(isprime[i]){

//             for(int j=2*i; j<N; j+=i){

//                 isprime[j]=false;

//             }

//         }

//     }

// }



// vi lp(N, 0), hp(N, 0);

// void lphp(){

//     for(int i=2; i<N; i++){

//         if(isprime[i]){

//             lp[i]=hp[i]=i;

//             for(int j=2*i; j<N; j+=i){

//                 hp[j]=i;

//                 if(lp[j]==0)

//                 lp[j]=i;

//             }

//         }

//     }

// }



// vi prime_factorisation_sieve(int n){

//     vi pf;

//     while(n>1){

//         int i=lp[n];

//         while(n%i==0){

//             pf.push_back(i);

//             n/=i;

//         }

//     }

//     return pf;

// }



// vi divisors(int n){

//     vi div;

//     for (int i=1; i*i<=n; i++){

//         if (n%i==0){

//             div.push_back(i);

//             if(i!=n/i)

//             div.push_back(n/i);

//         }

//     }

//     sort(div.begin(), div.end());

//     return div;

// }



// vi prime_factorisation(int n){

//     vi pf;

//     for(int i=2; i*i<=n; i++){

//         while(n%i==0){

//             pf.push_back(i);

//             n/=i;

//         }

//     }

//     if(n>1)

//     pf.push_back(n);

//     return pf;

// }



// int binExp(int a, int b, int M){

//     int ans=1;

//     while(b){

//         if(b&1)

//         ans=(ans*a)%M;

//         a=(a*a)%M;

//         b>>=1;

//     }

//     return ans;

// }



//Bitmask

// for(int i=0; i<(1<<n); i++){

//     for(int j=n-1; j>=0; j--){

//         if(i&(1<<j))

//     }

// }



// Understand question properly

// Read constraints carefully

// Find a good test case for constructive problems

// Don't complicate the question

// First brute force then optimisation

// Recheck your algorithm



void solve(){

string s;

cin>>s;

int n=s.size();

for(int i=0; i<n; i++){

int curr=s[i]-'0';

int maxi=curr, ind=-1;

for(int j=i+1; j<i+10; j++){

if(j==n) break;

int temp=s[j]-'0'-j+i;

if(temp>maxi){

maxi=temp;

ind=j;

}

}

if(ind==-1) continue;

char c=s[ind]-ind+i;

string temp=s.substr(i, ind-i);

for(int j=i+1; j<=ind; j++){

s[j]=temp[j-i-1];

}

s[i]=c;

}

cout<<s<<endl;

}



int32_t main(){

FastIO

int t;

cin>>t;

while(t--)

solve();

return 0;

}