#include using namespace std; void palindromeSubStrs(string s) { map m; int n = s.size(); int R[2][n+1]; s = "@" + s + "#"; for (int j = 0; j <= 1; j++) { int rp = 0; // length of 'palindrome radius' R[j][0] = 0; int i = 1; while (i <= n) { while (s[i - rp - 1] == s[i + j + rp]) rp++; R[j][i] = rp; int k = 1; while ((R[j][i - k] != rp - k) && (k < rp)) { R[j][i + k] = min(R[j][i - k],rp - k); k++; } rp = max(rp - k,0); i += k; } } s = s.substr(1, n); m[string(1, s[0])]=1; for (int i = 1; i <= n; i++) { for (int j = 0; j <= 1; j++) for (int rp = R[j][i]; rp > 0; rp--) m[s.substr(i - rp - 1, 2 * rp + j)]=1; m[string(1, s[i])]=1; } map::iterator ii; long int a[10000]; int k=0; for (ii = m.begin(); ii!=m.end(); ++ii){ a[k]=(*ii).first.length(); k++; } long int maxx=-3; for(int j=0;jmaxx){ maxx=a[j]; } } int cnt=0; for(int i=0;i> s; int q; cin>>q; for(int i=0;i>l>>r; string str; int m=r-l+1; str=s.substr(l-1,m); palindromeSubStrs(str); //cout<