import std.stdio, std.algorithm, std.array, std.conv, std.typecons; alias Set = bool[3 * 10^^5]; void main() { readln; readln[0..$-1].solve.writeln; } uint solve(string str) { uint m, z, p, mz, mp, zp, mzp; foreach (c; str) switch (c) { case '-': m += 1; // --- - mp = max(m, mp); // ---+++ ------ break; case '0': z = 1; zp = max(1, zp); // 0+++ mz = m+1; // ---0 mzp = max(mz, mzp); // ---0+++ break; case '+': p += 1; // +++ + mp += 1; // --- zp += 1; // 0+++ mzp += 1; // ---000+++ break; default: assert(0); } assert (max(p, mp, zp, mzp) == max(m, z, p, mz, mp, zp, mzp)); return max(m, z, p, mz, mp, zp, mzp); }