fork download
  1. #include <iostream>
  2. using namespace std;
  3. void f(string &s, long long k){
  4. int N = s.size();
  5. int n = 0;
  6. long long fac = 1;
  7. while(n<N&&fac<=k)
  8. fac *= ++n;
  9. while(k){
  10. fac /= n--;
  11. // worst case maximum num of swaps = 19*20/2 = 190
  12. for(int j=0; j<k/fac; j++)
  13. swap(s[N-n-1],s[N-n+j]);
  14. k %= fac;
  15. }
  16. }
  17. int main() {
  18. int t;
  19. long long k;
  20. string s;
  21. cin>>t;
  22. while(t--){
  23. cin>>s>>k; // to avoid long long overflow, keep k < 20!
  24. f(s,k);
  25. cout<<s<<endl;
  26. }
  27. return 0;
  28. }
Success #stdin #stdout 0s 4264KB
stdin
6
123 2
1234 8
123456789 546
123456789 24
123456789 23
123456789 25
stdout
213
2314
123869457
123465789
123459876
123465798