fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4.  
  5. ll hash1[100];
  6. ll hash2[100];
  7. vector<ll> vv;
  8. string a,b;
  9.  
  10. int main(){
  11. cin >> a;
  12. cin >> b;
  13. ll n = (a).size();
  14. for(ll i = 0;i < n;i++){
  15. vv.push_back(a[i] - '0');
  16. hash1[b[i] - '0']++;
  17. hash2[b[i] - '0']++;
  18. }
  19. bool flag = 0;
  20. vector<ll> ans1,ans2;
  21. for(ll i = 0;i < n;i++){
  22. if(!flag){
  23. if(hash1[vv[i]]){
  24. ans1.push_back(vv[i]);
  25. hash1[vv[i]]--;
  26. }else{
  27. bool flag1 = 0;
  28. for(ll j = vv[i];j <= 9;j++){
  29. if(hash1[j]){
  30. ans1.push_back(j);
  31. hash1[j]--;
  32. flag1 = 1;
  33. flag = 1;
  34. break;
  35. }
  36. }
  37. if(!flag1){
  38. while(ans1.size() and !flag1){
  39. hash1[ans1.back()]++;
  40. ll v = ans1.back();
  41. ans1.pop_back();
  42. i--;
  43. for(ll j = v + 1;j <= 9;j++){
  44. if(hash1[j]){
  45. ans1.push_back(j);
  46. hash1[j]--;
  47. flag = 1;
  48. flag1 = 1;
  49. break;
  50. }
  51. }
  52. }
  53. if(!ans1.size()){
  54. ans1.push_back(0);
  55. i = n;
  56. }
  57. }
  58. }
  59. }else{
  60. for(ll j = 0;j <= 9;j++){
  61. if(hash1[j]){
  62. ans1.push_back(j);
  63. hash1[j]--;
  64. break;
  65. }
  66. }
  67. }
  68. }
  69. flag = 0;
  70. for(ll i = 0;i <= 9;i++){
  71. hash1[i] = hash2[i];
  72. }
  73. for(ll i = 0;i < n;i++){
  74. if(!flag){
  75. if(hash1[vv[i]]){
  76. ans2.push_back(vv[i]);
  77. hash1[vv[i]]--;
  78. }else{
  79. bool flag1 = 0;
  80. for(ll j = vv[i];j >= 0;j--){
  81. if(hash1[j]){
  82. ans2.push_back(j);
  83. hash1[j]--;
  84. flag1 = 1;
  85. flag = 1;
  86. break;
  87. }
  88. }
  89. if(!flag1){
  90. while(ans2.size() and !flag1){
  91. hash1[ans2.back()]++;
  92. ll v = ans2.back();
  93. ans2.pop_back();
  94. i--;
  95. for(ll j = v - 1;j >= 0;j--){
  96. if(hash1[j]){
  97. ans2.push_back(j);
  98. hash1[j]--;
  99. flag = 1;
  100. flag1 = 1;
  101. break;
  102. }
  103. }
  104. }
  105. if(!ans2.size()){
  106. ans2.push_back(0);
  107. i = n;
  108. }
  109. }
  110. }
  111. }else{
  112. for(ll j = 9;j >= 0;j--){
  113. if(hash1[j]){
  114. ans2.push_back(j);
  115. hash1[j]--;
  116. break;
  117. }
  118. }
  119. }
  120. }
  121. for(ll i = 0;i < ans1.size();i++){
  122. printf("%lld",ans1[i]);
  123. }
  124. printf("\n");
  125. if(ans2[0] == 0 or !flag){
  126. ans2.clear();
  127. ans2.push_back(0);
  128. }
  129. for(ll i = 0;i < ans2.size();i++){
  130. printf("%lld",ans2[i]);
  131. }
  132. }
Runtime error #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
Standard output is empty