fork download
  1.  
  2.  
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5. long long a[10];
  6.  
  7. long long tcs(string s)
  8. {
  9. long long t = 0;
  10.  
  11. for (char i : s)
  12. {
  13. t += i - '0';
  14. }
  15. return t;
  16. }
  17. int main() {
  18. string s;
  19. cin >> s;
  20. if (tcs(s) % 9 != 0)
  21. {
  22. cout << -1;
  23. return 0;
  24. }
  25.  
  26. sort(s.begin(), s.end());
  27. long long i = 0;
  28.  
  29. while (s[i] == '0')
  30. {
  31. i++;
  32. }
  33. string x = "";
  34. x += s[i+1];
  35.  
  36. for (int j = 0; j <= i; j++)
  37. {
  38. x += '0';
  39. }
  40. i++;
  41.  
  42. while (i < s.size())
  43. {
  44. x += s[i];
  45. i++;
  46. }
  47. cout << x;
  48. a[x[x.size() - 1] - '0'] = (int)(x.size());
  49. for (long long i = x.size() - 2; i >= 0; i--)
  50. {
  51. long long j = -1;
  52.  
  53. for (long long v = 9; v >= 0; v--) if (a[v] != 0)
  54. {
  55. if (((x[i] - '0') * 10 + v) % 4 == 0 || ((v * 10) + (x[i] - '0')) % 4 == 0)
  56. {
  57. j = a[v] - 1;
  58. for (long long k = 0; k < i; k++) cout << x[k];
  59. for (long long k = i + 1; k <= j - 1; k++) cout << x[k];
  60. for (long long k = j + 1; k <= x.size() - 1; k++) cout << x[k];
  61. long long _min = min(x[i], x[j]) - '0';
  62. long long _max = max(x[i], x[j]) - '0';
  63. if ((_min * 10 + _max) % 4 == 0) cout << _min << _max;
  64. else cout << _max << _min;
  65. return 0;
  66. }
  67. }
  68. if (a[x[i] - '0'] == 0) a[x[i] - '0'] = i + 1;
  69. }
  70. }
  71.  
Success #stdin #stdout 0.01s 5312KB
stdin
432
stdout
30343304