int n; std::cin >> n; std::vector<int> pos(n); for (int i = 0; i < n; i++) { int x; std::cin >> x; pos[x] = i; }
std::vector<i64> sk(n), sb(n);
auto add = [&](int l, int r, int k, int b) { if (l > r) return; sk[l] += k; sb[l] += b; if (r + 1 < n) { sk[r + 1] -= k; sb[r + 1] -= b; } };
auto fun = [&](int v) { if (v < n / 2) { add(0, v - 1, -1, v); add(v, v + n / 2, 1, -v); add(v + n / 2 + 1, n - 1, -1, n + v); } else { add(0, v - n / 2 - 1, 1, n - v); add(v - n / 2, v - 1, -1, v); add(v, n - 1, 1, -v); } };
for (int i = 0; i < n; i++) { int v = (pos[i] - i + n) % n; fun(v); } for (int i = 1; i < n; i++) { sk[i] += sk[i - 1]; sb[i] += sb[i - 1]; }
i64 ans = 1LL << 60; for (int i = 0; i < n; i++) { ans = std::min(ans, sk[i] * i + sb[i]); } std::cout << ans << "\n";
voidinsert(std::string s){ int p = 1; for (auto c : s) { int x = c - 'a'; if (!trie[p][x]) { trie[p][x] = ++cnt; } p = trie[p][x]; sum[p]++; } have[p] = 1; }
boolfind(const std::string &s){ int p = 1; for (constauto c : s) { int x = c - 'a'; if (!trie[p][x]) { returnfalse; } p = trie[p][x]; } return have[p]; }
} // namespace Trie
i64 fun(i64 x, i64 y){ for (i64 i = x; true; i += P) { if (i % y == 0) { return (i / y); } } return-1; }
intmain(){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n; std::cin >> n; std::vector<std::string> s(n); std::map<i64, i64> mp, ans; for (int i = 0; i < n; i++) { std::cin >> s[i]; Trie::insert(s[i]); }
for (int i = 0; i < n; i++) { int p = 1; i64 ans = n; for (constauto c : s[i]) { int x = c - 'a'; p = Trie::trie[p][x]; ans = (ans + Trie::have[p]) % P; } ans = (ans - Trie::sum[p] + P) % P; std::cout << fun(ans + 1, 2) << "\n"; }
int ans = 0; int p = 1; for (int i = 0; i < int(s.length()); i++) { int x = s[i] - 'a'; p = Trie::trie[p][x]; if (Trie::have[p]) { ans++; p = 1; } } std::cout << ans << "\n";