fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
  4. #define Bit(mask , i) ((mask >> i) & 1)
  5. #define fi first
  6. #define se second
  7. #define _LOG2(nl) 31 - __builtin_clz(nl)
  8. #define c_bit(nl) __builtin_popcount(nl)
  9. #define li pair<long long , int>
  10. #define db double
  11. #define onBit(mask , i) (mask | (1 << i))
  12. #define offBit(mask , i) (mask & (~(1 << i)))
  13.  
  14. const long long MOD = 1e9 + 7;
  15. const long long INF = 1e14;
  16. const int N = 1e6 + 7;
  17. int pre[N] , z[N] , kmp[N];
  18. string s;
  19. int n;
  20.  
  21. void inp(){
  22. cin >> s;
  23. n = s.size();
  24. s = "L" + s;
  25. }
  26.  
  27. void solve(){
  28. int k = kmp[1] = 0;
  29. for (int i = 2 ; i <= n ; ++i){
  30. while (k > 0 && s[i] != s[k + 1]) k = kmp[k];
  31. kmp[i] = s[i] == s[k + 1] ? ++k : 0;
  32. }
  33. for (int i = 2 , l = 2 , r = 1 ; i <= n ; ++i){
  34. if (i <= r)
  35. z[i] = min(r - i + 1 , z[i - l + 1]);
  36. while (i + z[i] <= n && s[1 + z[i]] == s[i + z[i]])
  37. ++z[i];
  38. if (i + z[i] - 1 > r){
  39. l = i;
  40. r = i + z[i] - 1;
  41. }
  42. }
  43. for (int i = 1 ; i <= n ; ++i) if (z[i] != 0){
  44. ++pre[1];
  45. --pre[z[i] + 1];
  46. }
  47. for (int i = 1 ; i <= n ; ++i){
  48. pre[i] += pre[i - 1];
  49. }
  50. k = kmp[n];
  51. while (k > 0){
  52. if (pre[k] < 2){
  53. k = kmp[k];
  54. continue;
  55. }
  56. for (int i = 1 ; i <= k ; ++i) cout << s[i];
  57. return;
  58. }
  59. cout << "No solution!";
  60. }
  61.  
  62. int main(){
  63. // freopen("xhmax.inp" , "r" , stdin);
  64. // freopen("xhmax.out" , "w" , stdout);
  65. faster;
  66. inp();
  67. solve();
  68. return 0;
  69. }
  70.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
No solution!