#include using namespace std; template vector Mana(const vector &s){ //Manacher int n = s.size(); vector ret(n); for(int i=0,w=0; i= 0 && s.at(i-w) == s.at(i+w)) w++; //愚直に伸ばす. ret.at(i) = w; int k = 1; //i-kとi+kの回文範囲は iの回文範囲までは同じ. while(i-k >= 0 && k+ret.at(i-k) < w) ret.at(i+k) = ret.at(i-k),k++; //i-kが完全に含まれるならi+kも同じ. i += k; w -= k; //含まれなくてもw-kまでは同じ. } return ret; } template vector Mana2(const vector &s){ //偶数長検出用. vector t; t.reserve(s.size()<<1); T inf = numeric_limits::max(); for(auto &c : s) t.push_back(c),t.push_back(inf); //間にinfを挟むことで奇数長にする. t.pop_back(); auto ret = Mana(t); //M[i%2 == 0]=偶数は-1,M[i%2 == 1]=奇数は-1. for(int i=0; i<(int)ret.size(); i++) if((i&1) == (ret.at(i)&1)) ret.at(i)--; return ret; } vector Mana(const string &s){ int n = s.size(); vector ret(n); for(int i=0,w=0; i= 0 && s.at(i-w) == s.at(i+w)) w++; ret.at(i) = w; int k = 1; while(i-k >= 0 && k+ret.at(i-k) < w) ret.at(i+k) = ret.at(i-k),k++; i += k; w -= k; } return ret; } vector Mana2(const string &s){ string t; t.reserve(s.size()<<1); for(auto &c : s) t.push_back(c),t.push_back('$'); t.pop_back(); auto ret = Mana(t); for(int i=0; i<(int)ret.size(); i++) if((i&1) == (ret.at(i)&1)) ret.at(i)--; return ret; } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector A(N); for(auto &a : A) cin >> a; long long answer = N; vector D(N-1); for(int i=0; i