inline int Manacher(int a[], int n, int ret[]) {
	int MaxR = -1, where = 0, Ans = 0;
	for (int i = 1; i <= n; i++) {
		int &it = ret[i]; it = 0;
		if (i <= MaxR) it = min(ret[where * 2 - i], MaxR - i);
		while (i - it - 1 >= 1 && i + it + 1 <= n && a[i - it - 1] == a[i + it + 1]) it++;
		if (it + i > MaxR) MaxR = it + i, where = i;
		int tmp = (it << 1) + 1; tmp >>= 1; 
		if (a[i - it] != '$') tmp++; //如果a[i - it]不是分割符
		Ans = max(Ans, tmp);
	}
	return Ans;
}