Repository navigation
Expand file tree
/
Copy pathmarvinthang.code-profile
More file actions
8 lines (8 loc) · 348 KB
/
Copy pathmarvinthang.code-profile
File metadata and controls
8 lines (8 loc) · 348 KB
1
2
3
4
5
6
7
8
{
"name": "marvinthang",
"settings": "{\"settings\": \"{\\r\\n \\\"workbench.colorTheme\\\": \\\"Monokai Pro (Filter Spectrum)\\\",\\r\\n \\\"workbench.iconTheme\\\": \\\"material-icon-theme\\\",\\r\\n \\\"editor.inlineSuggest.enabled\\\": true,\\r\\n \\\"code-runner.saveAllFilesBeforeRun\\\": true,\\r\\n // \\\"editor.fontFamily\\\": \\\"\\\\\\\"Fira Code\\\\\\\"\\\",\\r\\n \\\"editor.fontLigatures\\\": \\\"'ss02'\\\",\\r\\n \\\"editor.fontFamily\\\": \\\"JetBrains Mono\\\",\\r\\n \\\"editor.fontSize\\\": 15,\\r\\n \\\"github.copilot.enable\\\": {\\r\\n \\\"*\\\": true,\\r\\n \\\"plaintext\\\": true,\\r\\n \\\"markdown\\\": false,\\r\\n \\\"yaml\\\": false\\r\\n },\\r\\n \\\"editor.codeActionsOnSave\\\": {},\\r\\n \\\"code-runner.executorMap\\\": {\\r\\n\\r\\n \\\"javascript\\\": \\\"node\\\",\\r\\n \\\"java\\\": \\\"cd $dir && javac $fileName && java $fileNameWithoutExt\\\",\\r\\n \\\"c\\\": \\\"cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt\\\",\\r\\n \\\"zig\\\": \\\"zig run\\\",\\r\\n \\\"cpp\\\": \\\"cd $dir\\\\nclear\\\\ng++ -DLOCAL -I/home/marvinthang/projects/algorithm-library/lib -std=c++20 -Wall $fileName -o $fileNameWithoutExt && .\\\\\\\\$fileNameWithoutExt\\\",\\r\\n \\\"objective-c\\\": \\\"cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt\\\",\\r\\n \\\"php\\\": \\\"php\\\",\\r\\n \\\"python\\\": \\\"cd $dir\\\\nclear\\\\npython -u $fileName\\\",\\r\\n \\\"perl\\\": \\\"perl\\\",\\r\\n \\\"perl6\\\": \\\"perl6\\\",\\r\\n \\\"ruby\\\": \\\"ruby\\\",\\r\\n \\\"go\\\": \\\"go run\\\",\\r\\n \\\"lua\\\": \\\"lua\\\",\\r\\n \\\"groovy\\\": \\\"groovy\\\",\\r\\n \\\"powershell\\\": \\\"powershell -ExecutionPolicy ByPass -File\\\",\\r\\n \\\"bat\\\": \\\"cmd /c\\\",\\r\\n \\\"shellscript\\\": \\\"bash\\\",\\r\\n \\\"fsharp\\\": \\\"fsi\\\",\\r\\n \\\"csharp\\\": \\\"scriptcs\\\",\\r\\n \\\"vbscript\\\": \\\"cscript //Nologo\\\",\\r\\n \\\"typescript\\\": \\\"ts-node\\\",\\r\\n \\\"coffeescript\\\": \\\"coffee\\\",\\r\\n \\\"scala\\\": \\\"scala\\\",\\r\\n \\\"swift\\\": \\\"swift\\\",\\r\\n \\\"julia\\\": \\\"julia\\\",\\r\\n \\\"crystal\\\": \\\"crystal\\\",\\r\\n \\\"ocaml\\\": \\\"ocaml\\\",\\r\\n \\\"r\\\": \\\"Rscript\\\",\\r\\n \\\"applescript\\\": \\\"osascript\\\",\\r\\n \\\"clojure\\\": \\\"lein exec\\\",\\r\\n \\\"haxe\\\": \\\"haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt\\\",\\r\\n \\\"rust\\\": \\\"cd $dir && rustc $fileName && $dir$fileNameWithoutExt\\\",\\r\\n \\\"racket\\\": \\\"racket\\\",\\r\\n \\\"scheme\\\": \\\"csi -script\\\",\\r\\n \\\"ahk\\\": \\\"autohotkey\\\",\\r\\n \\\"autoit\\\": \\\"autoit3\\\",\\r\\n \\\"dart\\\": \\\"dart\\\",\\r\\n \\\"pascal\\\": \\\"cd $dir && fpc $fileName && $dir$fileNameWithoutExt\\\",\\r\\n \\\"d\\\": \\\"cd $dir && dmd $fileName && $dir$fileNameWithoutExt\\\",\\r\\n \\\"haskell\\\": \\\"runghc\\\",\\r\\n \\\"nim\\\": \\\"nim compile --verbosity:0 --hints:off --run\\\",\\r\\n \\\"lisp\\\": \\\"sbcl --script\\\",\\r\\n \\\"kit\\\": \\\"kitc --run\\\",\\r\\n \\\"v\\\": \\\"v run\\\",\\r\\n \\\"sass\\\": \\\"sass --style expanded\\\",\\r\\n \\\"scss\\\": \\\"scss --style expanded\\\",\\r\\n \\\"less\\\": \\\"cd $dir && lessc $fileName $fileNameWithoutExt.css\\\",\\r\\n \\\"FortranFreeForm\\\": \\\"cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt\\\",\\r\\n \\\"fortran-modern\\\": \\\"cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt\\\",\\r\\n \\\"fortran_fixed-form\\\": \\\"cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt\\\",\\r\\n \\\"fortran\\\": \\\"cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt\\\",\\r\\n \\\"sml\\\": \\\"cd $dir && sml $fileName\\\",\\r\\n \\\"mojo\\\": \\\"mojo run\\\"\\r\\n },\\r\\n \\\"extensions.ignoreRecommendations\\\": true,\\r\\n \\\"workbench.colorCustomizations\\\": {\\r\\n \\\"terminal.background\\\": \\\"#000000\\\"\\r\\n },\\r\\n \\\"code-runner.runInTerminal\\\": true,\\r\\n \\\"code-runner.ignoreSelection\\\": true,\\r\\n \\\"material-icon-theme.files.associations\\\": {\\r\\n \\\"**.inp\\\": \\\"log\\\",\\r\\n \\\"**.out\\\": \\\"log\\\",\\r\\n \\\"**.ans\\\": \\\"log\\\",\\r\\n },\\r\\n \\\"background.autoInstall\\\": false,\\r\\n \\\"code-runner.clearPreviousOutput\\\": true,\\r\\n \\\"[cpp]\\\": {\\r\\n \\\"editor.defaultFormatter\\\": \\\"ms-vscode.cpptools\\\"\\r\\n },\\r\\n \\\"C_Cpp.clang_format_fallbackStyle\\\": \\\"{ BasedOnStyle: Google,IndentWidth: 4,TabWidth: 4, UseTab: Always, ColumnLimit: 80 }\\\",\\r\\n \\\"cph.general.defaultLanguage\\\": \\\"cpp\\\",\\r\\n \\\"cph.language.cpp.SubmissionCompiler\\\": \\\"GNU G++20 13.2 (64 bit, winlibs)\\\",\\r\\n \\\"files.defaultLanguage\\\": \\\"cpp\\\",\\r\\n \\\"cph.general.saveLocation\\\": \\\"D:\\\\\\\\code\\\\\\\\practice\\\\\\\\codeforces\\\\\\\\trash\\\",\\r\\n \\\"cph.general.useShortCodeForcesName\\\": true,\\r\\n \\\"cph.language.cpp.Args\\\": \\\"-DLOCAL -I/home/marvinthang/projects/algorithm-library/lib -std=c++20 -Wall\\\",\\r\\n \\\"markdown-preview-enhanced.codeBlockTheme\\\": \\\"monokai.css\\\",\\r\\n \\\"markdown-preview-enhanced.previewTheme\\\": \\\"monokai.css\\\",\\r\\n \\\"chatgpt.lang\\\": \\\"en\\\",\\r\\n \\\"editor.insertSpaces\\\": false,\\r\\n \\\"C_Cpp.default.cppStandard\\\": \\\"c++20\\\",\\r\\n \\\"terminal.integrated.enableMultiLinePasteWarning\\\": false,\\r\\n \\\"editor.wordWrap\\\": \\\"on\\\",\\r\\n \\\"settingsSync.ignoredSettings\\\": [\\r\\n \\\"-C_Cpp.default.defines\\\",\\r\\n \\\"-C_Cpp.default.customConfigurationVariables\\\",\\r\\n \\\"-C_Cpp.default.includePath\\\",\\r\\n \\\"-C_Cpp.default.compilerPath\\\"\\r\\n ],\\r\\n}\"}",
"keybindings": "{\"keybindings\":\"// Place your key bindings in this file to override the defaultsauto[]\\r\\n[\\r\\n {\\r\\n \\\"key\\\": \\\"ctrl+t\\\",\\r\\n \\\"command\\\": \\\"trailing-spaces.deleteTrailingSpaces\\\",\\r\\n \\\"when\\\": \\\"editorTextFocus\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"ctrl+alt+x ctrl+alt+x\\\",\\r\\n \\\"command\\\": \\\"editor.action.changeAll\\\",\\r\\n \\\"when\\\": \\\"editorTextFocus && !editorReadonly\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"ctrl+f2\\\",\\r\\n \\\"command\\\": \\\"-editor.action.changeAll\\\",\\r\\n \\\"when\\\": \\\"editorTextFocus && !editorReadonly\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"ctrl+f2\\\",\\r\\n \\\"command\\\": \\\"bookmarks.toggle\\\",\\r\\n \\\"when\\\": \\\"editorTextFocus\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"ctrl+alt+k\\\",\\r\\n \\\"command\\\": \\\"-bookmarks.toggle\\\",\\r\\n \\\"when\\\": \\\"editorTextFocus\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"f2\\\",\\r\\n \\\"command\\\": \\\"editor.action.rename\\\",\\r\\n \\\"when\\\": \\\"editorHasRenameProvider && editorTextFocus && !editorReadonly\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"f2\\\",\\r\\n \\\"command\\\": \\\"-editor.action.rename\\\",\\r\\n \\\"when\\\": \\\"editorHasRenameProvider && editorTextFocus && !editorReadonly\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"ctrl+u ctrl+s\\\",\\r\\n \\\"command\\\": \\\"workbench.action.openSnippets\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"f2\\\",\\r\\n \\\"command\\\": \\\"renameFile\\\",\\r\\n \\\"when\\\": \\\"explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"f2\\\",\\r\\n \\\"command\\\": \\\"-renameFile\\\",\\r\\n \\\"when\\\": \\\"explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"ctrl+shift+c ctrl+shift+d\\\",\\r\\n \\\"command\\\": \\\"workbench.view.debug\\\",\\r\\n \\\"when\\\": \\\"viewContainer.workbench.view.debug.enabled\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"ctrl+b\\\",\\r\\n \\\"command\\\": \\\"github.copilot.generate\\\",\\r\\n \\\"when\\\": \\\"editorTextFocus && github.copilot.activated && !commentEditorFocused && !inInteractiveInput && !interactiveEditorFocused\\\"\\r\\n },\\r\\n {\\r\\n \\\"key\\\": \\\"ctrl+enter\\\",\\r\\n \\\"command\\\": \\\"-github.copilot.generate\\\",\\r\\n \\\"when\\\": \\\"editorTextFocus && github.copilot.activated && !commentEditorFocused && !inInteractiveInput && !interactiveEditorFocused\\\"\\r\\n },\\r\\n]\",\"platform\":3}",
"snippets": "{\n \"START\": {\n \"scope\": \"cpp\",\n \"prefix\": \"START\",\n \"body\": [\n \"/*************************************\",\n \"* author: marvinthang *\",\n \"* created: ${CURRENT_DATE}.${CURRENT_MONTH}.${CURRENT_YEAR} ${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND} *\",\n \"*************************************/\",\n \"\",\n \"#include <bits/stdc++.h>\",\n \"\",\n \"using namespace std;\",\n \"\",\n \"#define fi first\",\n \"#define se second\",\n \"#define file(name) do { if (std::filesystem::exists(name \\\".inp\\\")) { std::freopen(name \\\".inp\\\", \\\"r\\\", stdin); std::freopen(name \\\".out\\\", \\\"w\\\", stdout); } } while (false)\",\n \"\",\n \"template <class U, class V> std::istream& operator>>(std::istream& in, std::pair<U, V>& value) { return in >> value.first >> value.second; }\",\n \"template <class T, class Allocator> std::istream& operator>>(std::istream& in, std::vector<T, Allocator>& value) { for (T& x : value) in >> x; return in; }\",\n \"template <class U, class V> std::ostream& operator<<(std::ostream& out, const std::pair<U, V>& value) { return out << '(' << value.first << \\\", \\\" << value.second << ')'; }\",\n \"template <class... Ts> std::ostream& operator<<(std::ostream& out, const std::tuple<Ts...>& tuple) { return std::apply([&out](const Ts&... args) -> std::ostream& { out << '('; const char* sep = \\\"\\\"; ((out << sep << args, sep = \\\", \\\"), ...); return out << ')'; }, tuple); }\",\n \"template <class T> requires(std::ranges::input_range<T> && !std::convertible_to<const T&, std::string_view>) std::ostream& operator<<(std::ostream& out, const T& container) { out << '{'; const char* sep = \\\"\\\"; for (const auto& value : container) out << sep << value, sep = \\\", \\\"; return out << '}'; }\",\n \"template <class T, class Container> std::ostream& operator<<(std::ostream& out, const std::stack<T, Container>& stack) { auto copy = stack; std::vector<T> values; values.reserve(copy.size()); while (!copy.empty()) { values.push_back(copy.top()); copy.pop(); } std::reverse(values.begin(), values.end()); return out << values; }\",\n \"template <class T, class Container> std::ostream& operator<<(std::ostream& out, const std::queue<T, Container>& queue) { auto copy = queue; out << '{'; const char* sep = \\\"\\\"; while (!copy.empty()) { out << sep << copy.front(); copy.pop(); sep = \\\", \\\"; } out << '}'; return out; }\",\n \"template <class T, class Container, class Compare> std::ostream& operator<<(std::ostream& out, const std::priority_queue<T, Container, Compare>& queue) { auto copy = queue; out << '{'; const char* sep = \\\"\\\"; while (!copy.empty()) { out << sep << copy.top(); copy.pop(); sep = \\\", \\\"; } out << '}'; return out; }\",\n \"template <class Fun> class y_combinator_result { private: [[no_unique_address]] Fun fun_; public: template <class F> requires (!std::same_as<std::remove_cvref_t<F>, y_combinator_result>) explicit constexpr y_combinator_result(F&& fun) : fun_(std::forward<F>(fun)) {} template <class... Args> constexpr decltype(auto) operator()(Args&&... args) { return std::invoke(fun_, *this, std::forward<Args>(args)...); } };\",\n \"template <class Fun> y_combinator_result(Fun&&) -> y_combinator_result<std::decay_t<Fun>>;\",\n \"template <class Fun> constexpr auto y_combinator(Fun&& fun) { return y_combinator_result{std::forward<Fun>(fun)}; }\",\n \"template <class T, std::size_t D> struct Vec : std::vector<Vec<T, D - 1>> { static_assert(D > 1, \\\"Vector dimension must be positive!\\\"); template <class... Args> explicit Vec(std::size_t size = 0, Args&&... args) : std::vector<Vec<T, D - 1>>(size, Vec<T, D - 1>(std::forward<Args>(args)...)) {} };\",\n \"template <class T> struct Vec<T, 1> : std::vector<T> { explicit Vec(std::size_t size = 0, const T& value = T{}) : std::vector<T>(size, value) {} };\",\n \"\",\n \"#ifdef LOCAL\",\n \"\\t#include \\\"core/debug.h\\\"\",\n \"#else\",\n \"\\t#define DB(...) ((void) 0)\",\n \"\\t#define db(...) \\\"\\\"\",\n \"\\t#define debug(...) ((void) 0)\",\n \"#endif\",\n \"\",\n \"void process(void) {\",\n \"\\t$0\",\n \"}\",\n \"\",\n \"int main(void) {\",\n \"\\tstd::ios_base::sync_with_stdio(false); std::cin.tie(nullptr);\",\n \"\\tfile(\\\"${TM_FILENAME_BASE}\\\");\",\n \"\\t// int t; std::cin >> t; while (t--)\",\n \"\\tprocess();\",\n \"\\treturn (0^0);\",\n \"}\"\n ],\n \"description\": \"START\"\n },\n \"AHO_CORASICK_ARR\": {\n \"scope\": \"cpp\",\n \"prefix\": \"AHO_CORASICK_ARR\",\n \"body\": [\n \"const int ALPHABET_SIZE = 26;\",\n \"struct Node {\",\n \" int parent, parChar;\",\n \" int children[ALPHABET_SIZE];\",\n \" int fail, nxt[ALPHABET_SIZE];\",\n \" int cnt;\",\n \" Node(int parent = -1, int parChar = -1): parent(parent), parChar(parChar) {\",\n \" fail = -1;\",\n \" cnt = 0;\",\n \" for (int i = 0; i < ALPHABET_SIZE; ++i) children[i] = nxt[i] = -1;\",\n \" }\",\n \"};\",\n \" \",\n \"vector <Node> nodes;\",\n \"\",\n \"void addString(const string &s) {\",\n \" int p = 0;\",\n \" for (int i = 0; i < (int) s.size(); ++i) {\",\n \" int c = s[i] - 'a';\",\n \" if (!~nodes[p].children[c]) {\",\n \" nodes[p].children[c] = nodes.size();\",\n \" nodes.push_back(Node(p, c));\",\n \" }\",\n \" p = nodes[p].children[c];\",\n \" }\",\n \" ++nodes[p].cnt;\",\n \"}\",\n \" \",\n \"void AC_BFS(void) {\",\n \" queue <int> q;\",\n \" nodes[0].fail = 0;\",\n \" nodes[0].cnt = 0;\",\n \" for (int i = 0; i < ALPHABET_SIZE; ++i) {\",\n \" if (~nodes[0].children[i]) {\",\n \" nodes[0].nxt[i] = nodes[0].children[i];\",\n \" q.push(nodes[0].children[i]);\",\n \" } else nodes[0].nxt[i] = 0;\",\n \" }\",\n \" while (!q.empty()) {\",\n \" int p = q.front(); q.pop();\",\n \" nodes[p].fail = !nodes[p].parent ? 0 : nodes[nodes[nodes[p].parent].fail].nxt[nodes[p].parChar];\",\n \" nodes[p].cnt += nodes[nodes[p].fail].cnt;\",\n \" for (int i = 0; i < ALPHABET_SIZE; ++i) {\",\n \" if (~nodes[p].children[i]) {\",\n \" nodes[p].nxt[i] = nodes[p].children[i];\",\n \" q.push(nodes[p].children[i]);\",\n \" } else nodes[p].nxt[i] = nodes[nodes[p].fail].nxt[i];\",\n \" }\",\n \" }\",\n \"}\"\n ],\n \"description\": \"AHO_CORASICK_ARR\"\n },\n \"AHO_CORASICK_PTR\": {\n \"scope\": \"cpp\",\n \"prefix\": \"AHO_CORASICK_PTR\",\n \"body\": [\n \"const int ALPHABET_SIZE = 26;\",\n \"struct Node {\",\n \" Node *parent;\",\n \" int parChar;\",\n \" Node *children[ALPHABET_SIZE];\",\n \" Node *fail, *nxt[ALPHABET_SIZE];\",\n \" int cnt;\",\n \" Node(Node *parent = nullptr, int parChar = -1): parent(parent), parChar(parChar) {\",\n \" fail = nullptr;\",\n \" for (int i = 0; i < ALPHABET_SIZE; ++i) children[i] = nxt[i] = nullptr;\",\n \" cnt = 0;\",\n \" }\",\n \"};\",\n \" \",\n \"int numNode;\",\n \"Node *root;\",\n \" \",\n \"void addString(const string &s) {\",\n \" Node *p = root;\",\n \" for (int i = 0; i < (int) s.size(); ++i) {\",\n \" int c = s[i] - 'a';\",\n \" if (p->children[c] == nullptr) p->children[c] = new Node(p, c);\",\n \" p = p->children[c];\",\n \" }\",\n \" ++p->cnt;\",\n \"}\",\n \" \",\n \"void AC_BFS(void) {\",\n \" queue <Node*> q;\",\n \" root->fail = root;\",\n \" root->cnt = 0;\",\n \" for (int i = 0; i < ALPHABET_SIZE; ++i) {\",\n \" if (root->children[i] != nullptr) {\",\n \" root->nxt[i] = root->children[i];\",\n \" q.push(root->children[i]);\",\n \" } else root->nxt[i] = root;\",\n \" }\",\n \" while (!q.empty()) {\",\n \" Node *p = q.front(); q.pop();\",\n \" p->fail = p->parent == root ? root : p->parent->fail->nxt[p->parChar];\",\n \" p->cnt += p->fail->cnt;\",\n \" for (int i = 0; i < ALPHABET_SIZE; ++i) {\",\n \" if (p->children[i] != nullptr) {\",\n \" p->nxt[i] = p->children[i];\",\n \" q.push(p->children[i]);\",\n \" } else p->nxt[i] = p->fail->nxt[i];\",\n \" }\",\n \" }\",\n \"}\",\n \" \"\n ],\n \"description\": \"AHO_CORASICK_PTR\"\n },\n \"SPARSE_TABLE\": {\n \"scope\": \"cpp\",\n \"prefix\": \"SPARSE_TABLE\",\n \"body\": [\n \"template <class T, T (*op) (T, T)> class SparseTable {\",\n \"public:\",\n \" SparseTable() = default;\",\n \" SparseTable(const vector <T> &v) { build(v); }\",\n \" void build(const vector <T> &v) {\",\n \" n = v.size();\",\n \" int h = n ? __lg(n) + 1 : 0;\",\n \" table.assign((long long) h * n, T());\",\n \" if (!n) return;\",\n \" copy(v.begin(), v.end(), table.begin());\",\n \" for (int k = 1; k < h; ++k) {\",\n \" int len = 1 << k, half = len >> 1;\",\n \" long long cur = 1LL * k * n, prev = 1LL * (k - 1) * n;\",\n \" for (int i = 0; i + len <= n; ++i)\",\n \" table[cur + i] = op(table[prev + i], table[prev + i + half]);\",\n \" }\",\n \" }\",\n \" T get(int l, int r) const { // [l, r - 1]\",\n \" assert(0 <= l && l < r && r <= n);\",\n \" int k = __lg(r - l);\",\n \" long long offset = 1LL * k * n;\",\n \" return op(table[offset + l], table[offset + r - (1 << k)]);\",\n \" }\",\n \" int size(void) const { return n; }\",\n \" bool empty(void) const { return !n; }\",\n \"\",\n \"private:\",\n \" vector <T> table;\",\n \" int n = 0;\",\n \"};\",\n \"template <class T> T sparse_table_min(T x, T y) { return x < y ? x : y; }\",\n \"template <class T> T sparse_table_max(T x, T y) { return x > y ? x : y; }\"\n ],\n \"description\": \"SPARSE_TABLE\"\n },\n \"SEGTREE\": {\n \"scope\": \"cpp\",\n \"prefix\": \"SEGTREE\",\n \"body\": [\n \"template<\",\n \" class T, // data type for nodes\",\n \" T (*op) (const T&, const T&), // operator to combine 2 nodes\",\n \" T (*e)() // identity element\",\n \" >\",\n \"struct SegTree {\",\n \" SegTree(): SegTree(0) {}\",\n \" SegTree(int n) : SegTree(vector<T>(n, e())) {}\",\n \" SegTree(const vector <T>& v) : n(v.size()) {\",\n \" log = 0;\",\n \" while ((1 << log) < n) ++log;\",\n \" size = 1 << log;\",\n \" d = vector<T>(size << 1, e());\",\n \" for (int i = 0; i < n; ++i) d[size + i] = v[i];\",\n \" for (int i = size - 1; i > 0; --i) update(i);\",\n \" }\",\n \" SegTree(vector <T>&& v) : n(v.size()) {\",\n \" log = 0;\",\n \" while ((1 << log) < n) ++log;\",\n \" size = 1 << log;\",\n \" d = vector<T>(size << 1, e());\",\n \" for (int i = 0; i < n; ++i) d[size + i] = move(v[i]);\",\n \" for (int i = size - 1; i > 0; --i) update(i);\",\n \" }\",\n \"\",\n \" // 0 <= p < n\",\n \" void set(int p, const T &x) {\",\n \" assert(0 <= p && p < n);\",\n \" p += size; d[p] = x;\",\n \" for (int i = 1; i <= log; ++i) update(p >> i);\",\n \" }\",\n \"\",\n \" // 0 <= p < n\",\n \" void set(int p, T &&x) {\",\n \" assert(0 <= p && p < n);\",\n \" p += size; d[p] = move(x);\",\n \" for (int i = 1; i <= log; ++i) update(p >> i);\",\n \" }\",\n \"\",\n \" // 0 <= p < n\",\n \" const T& get(int p) const {\",\n \" assert(0 <= p && p < n);\",\n \" return d[p + size];\",\n \" }\",\n \"\",\n \" // Get product in range [l, r-1]\",\n \" // 0 <= l <= r <= n\",\n \" // For empty segment (l == r) -> return e()\",\n \" T prod(int l, int r) const {\",\n \" assert(0 <= l && l <= r && r <= n);\",\n \" T sml = e(), smr = e();\",\n \" l += size; r += size;\",\n \" while (l < r) {\",\n \" if (l & 1) sml = op(sml, d[l++]);\",\n \" if (r & 1) smr = op(d[--r], smr);\",\n \" l >>= 1; r >>= 1;\",\n \" }\",\n \" return op(sml, smr);\",\n \" }\",\n \"\",\n \" const T& all_prod() const { return d[1]; }\",\n \"\",\n \" // Binary search on SegTree to find largest r:\",\n \" // f(op(a[l] .. a[r-1])) = true (assuming empty array is always true)\",\n \" // f(op(a[l] .. a[r])) = false (assuming op(..., a[n]), which is out of bound, is always false)\",\n \" template <bool (*f)(const T&)> int max_right(int l) const { return max_right(l, [](const T &x) { return f(x); }); }\",\n \" template <class F> int max_right(int l, F f) const {\",\n \" assert(0 <= l && l <= n);\",\n \" assert(f(e()));\",\n \" if (l == n) return n;\",\n \" l += size;\",\n \" T sm = e();\",\n \" do {\",\n \" while (!(l & 1)) l >>= 1;\",\n \" if (!f(op(sm, d[l]))) {\",\n \" while (l < size) {\",\n \" l = l << 1;\",\n \" if (f(op(sm, d[l]))) {\",\n \" sm = op(sm, d[l]);\",\n \" l++;\",\n \" }\",\n \" }\",\n \" return l - size;\",\n \" }\",\n \" sm = op(sm, d[l]);\",\n \" l++;\",\n \" } while ((l & -l) != l);\",\n \" return n;\",\n \" }\",\n \"\",\n \" // Binary search on SegTree to find smallest l:\",\n \" // f(op(a[l] .. a[r-1])) = true (assuming empty array is always true)\",\n \" // f(op(a[l-1] .. a[r-1])) = false (assuming op(a[-1], ..), which is out of bound, is always false)\",\n \" template <bool (*f)(const T&)> int min_left(int r) const { return min_left(r, [](const T &x) { return f(x); }); }\",\n \" template <class F> int min_left(int r, F f) const {\",\n \" assert(0 <= r && r <= n);\",\n \" assert(f(e()));\",\n \" if (r == 0) return 0;\",\n \" r += size;\",\n \" T sm = e();\",\n \" do {\",\n \" r--;\",\n \" while (r > 1 && (r & 1)) r >>= 1;\",\n \" if (!f(op(d[r], sm))) {\",\n \" while (r < size) {\",\n \" r = r << 1 | 1;\",\n \" if (f(op(d[r], sm))) {\",\n \" sm = op(d[r], sm);\",\n \" r--;\",\n \" }\",\n \" }\",\n \" return r + 1 - size;\",\n \" }\",\n \" sm = op(d[r], sm);\",\n \" } while ((r & -r) != r);\",\n \" return 0;\",\n \" }\",\n \"\",\n \"private:\",\n \" int n, size, log;\",\n \" vector <T> d;\",\n \" void update(int k) { d[k] = op(d[2 * k], d[2 * k + 1]); }\",\n \"};\"\n ],\n \"description\": \"SEGTREE\"\n },\n \"RANDOM\": {\n \"scope\": \"cpp\",\n \"prefix\": \"RANDOM\",\n \"body\": [\n \"mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); \",\n \"template <class T> T rand(T l, T h) { return uniform_int_distribution <T> (l, h) (rng); } \",\n \"template <class T> T rand(T h) { return uniform_int_distribution <T> (0, h - 1) (rng); } \"\n ],\n \"description\": \"RANDOM\"\n },\n \"ROUND\": {\n \"scope\": \"cpp\",\n \"prefix\": \"ROUND\",\n \"body\": [\n \"template <class A, class B> inline A ceil(A a, B b) { return a / b + ((a ^ b) > 0 && a % b); }\",\n \"template <class A, class B> inline A floor(A a, B b) { return a / b - ((a ^ b) < 0 && a % b); }\"\n ],\n \"description\": \"ROUND\"\n },\n \"PARTIALLY_PERSISTENT_DSU\": {\n \"scope\": \"cpp\",\n \"prefix\": \"PARTIALLY_PERSISTENT_DSU\",\n \"body\": [\n \"struct PartiallyPersistentDisjointSet {\",\n \" vector <int> lab, t_unite;\",\n \" PartiallyPersistentDisjointSet(int n = 0): lab(n + 1, -1), t_unite(n + 1, (int) 1e9) {}\",\n \" void reset(void) {\",\n \" fill(lab.begin(), lab.end(), -1);\",\n \" fill(t_unite.begin(), t_unite.end(), (int) 1e9);\",\n \" }\",\n \" void resize(int n) {\",\n \" lab.assign(n + 1, -1);\",\n \" t_unite.assign(n + 1, (int) 1e9);\",\n \" }\",\n \" bool connected(int t, int u, int v) { return find(t, u) == find(t, v); }\",\n \" bool isRoot(int t, int u) { return t_unite[u] > t; }\",\n \" int size(int t, int u) { return -lab[find(t, u)]; }\",\n \" int find(int t, int u) { return t_unite[u] > t ? u : find(t, lab[u]); }\",\n \" bool join(int t, int u, int v) {\",\n \" if ((u = find(t, u)) == (v = find(t, v))) return false;\",\n \" if (lab[u] > lab[v]) swap(u, v);\",\n \" lab[u] += lab[v]; lab[v] = u; t_unite[v] = t;\",\n \" return true;\",\n \" }\",\n \"};\",\n \"using PPDS = PartiallyPersistentDisjointSet;\"\n ],\n \"description\": \"PARTIALLY_PERSISTENT_DSU\"\n },\n \"ORDERED_SET\": {\n \"scope\": \"cpp\",\n \"prefix\": \"ORDERED_SET\",\n \"body\": [\n \"#include <ext/pb_ds/assoc_container.hpp>\",\n \"#include <ext/pb_ds/tree_policy.hpp>\",\n \"using namespace __gnu_pbds;\",\n \"template <typename T>\",\n \"using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;\"\n ],\n \"description\": \"ORDERED_SET\"\n },\n \"OFFSET_VECTOR\": {\n \"scope\": \"cpp\",\n \"prefix\": \"OFFSET_VECTOR\",\n \"body\": [\n \"template <typename V> struct OffsetVector {\",\n \" // Index should be in [minIndex, maxIndex].\",\n \" // minIndex and maxIndex can be negative.\",\n \" OffsetVector(int minIndex, int maxIndex): x(maxIndex - minIndex + 1), offset(minIndex) {}\",\n \" V & operator [] (int index) { return x[index - offset]; }\",\n \" auto begin() { return x.begin(); }\",\n \" auto end() { return x.end(); }\",\n \" auto size() { return x.size(); }\",\n \"private:\",\n \" vector <V> x;\",\n \" int offset;\",\n \"};\"\n ],\n \"description\": \"OFFSET_VECTOR\"\n },\n \"RABIN_MILLER\": {\n \"scope\": \"cpp\",\n \"prefix\": \"RABIN_MILLER\",\n \"body\": [\n \"namespace RABIN_MILLER {\",\n \"unsigned mod_mult(unsigned a, unsigned b, unsigned m) { return (uint64_t) a * b % m; }\",\n \"uint64_t mod_mult64(uint64_t a, uint64_t b, uint64_t m) { return __int128_t(a) * b % m; }\",\n \"unsigned mod_pow(unsigned a, uint64_t b, unsigned m) {\",\n \" unsigned ret = 1;\",\n \" for (; b; b >>= 1, a = mod_mult(a, a, m)) if (b & 1) ret = mod_mult(ret, a, m);\",\n \" return ret;\",\n \"}\",\n \"uint64_t mod_pow64(uint64_t a, uint64_t b, uint64_t m) {\",\n \" uint64_t ret = 1;\",\n \" for (; b; b >>= 1, a = mod_mult64(a, a, m)) if (b & 1) ret = mod_mult64(ret, a, m);\",\n \" return ret;\",\n \"}\",\n \"bool is_prime32(unsigned n) {\",\n \" if (n <= 3) return (n >= 2);\",\n \" static const unsigned small[] = {\",\n \" 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67,\",\n \" 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139,\",\n \" };\",\n \" for (size_t i = 0; i < 34; ++i) if (n%small[i] == 0) return n == small[i];\",\n \" static const unsigned millerrabin[] = {2, 7, 61};\",\n \" unsigned s = n - 1, r = 0;\",\n \" while (!(s & 1)) s >>= 1, ++r;\",\n \" for (size_t i = 0, j; i < 3; ++i) {\",\n \" unsigned md = mod_pow(millerrabin[i], s, n);\",\n \" if (md == 1) continue;\",\n \" for (j = 1; j < r && md != n - 1; ++j) md = mod_mult(md, md, n);\",\n \" if (md != n - 1) return false;\",\n \" }\",\n \" return true;\",\n \"}\",\n \"bool is_prime64(uint64_t n) {\",\n \" if (n <= 3) return (n >= 2);\",\n \" static const uint64_t small[] = {\",\n \" 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67,\",\n \" 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139,\",\n \" 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199\",\n \" };\",\n \" for (size_t i = 0; i < 46; ++i) if (n % small[i] == 0) return n == small[i];\",\n \" static const uint64_t millerrabin[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};\",\n \" static const uint64_t A014233[] = {\",\n \" 2047LL, 1373653LL, 25326001LL, 3215031751LL, 2152302898747LL,\",\n \" 3474749660383LL, 341550071728321LL, 341550071728321LL,\",\n \" 3825123056546413051LL, 3825123056546413051LL, 3825123056546413051LL, 0\",\n \" };\",\n \" uint64_t s = n - 1, r = 0;\",\n \" while (!(s & 1)) s >>= 1, ++r;\",\n \" for (size_t i = 0, j; i < 11; ++i) {\",\n \" uint64_t md = mod_pow64(millerrabin[i], s, n);\",\n \" if (md != 1) {\",\n \" for (j = 1; j < r && md != n - 1; ++j) md = mod_mult64(md, md, n);\",\n \" if (md != n - 1) return false;\",\n \" }\",\n \" if (n < A014233[i]) return true;\",\n \" }\",\n \" return true;\",\n \"}\",\n \"} using namespace RABIN_MILLER;\"\n ],\n \"description\": \"RABIN_MILLER\"\n },\n \"NUMBER_THEORETIC_TRANSFORM\": {\n \"scope\": \"cpp\",\n \"prefix\": \"NUMBER_THEORETIC_TRANSFORM\",\n \"body\": [\n \"namespace NUMBER_THEORETIC_TRANSFORM {\",\n \"template <typename Modular> class NTT {\",\n \"public:\",\n \" static int md, base, max_base;\",\n \" static Modular root;\",\n \" static vector <Modular> roots;\",\n \" static vector <int> rev;\",\n \" static void clear() {\",\n \" root = base = max_base = 0;\",\n \" roots.clear();\",\n \" rev.clear();\",\n \" }\",\n \" static void init() {\",\n \" md = Modular::mod();\",\n \" assert(md >= 3 && md % 2 == 1);\",\n \" auto tmp = md - 1;\",\n \" max_base = 0;\",\n \" while (!(tmp & 1)) tmp >>= 1, ++max_base;\",\n \" root = 2;\",\n \" while (root.pow((md - 1) >> 1).val() == 1) ++root;\",\n \" assert(root.pow(md - 1) == 1);\",\n \" root = root.pow((md - 1) >> max_base);\",\n \" base = 1; rev = {0, 1}; roots = {0, 1};\",\n \" }\",\n \" static void ensure_base(int nbase) {\",\n \" if (md != Modular::mod()) clear();\",\n \" if (roots.empty()) init();\",\n \" if (nbase <= base) return;\",\n \" assert(nbase <= max_base);\",\n \" rev.resize(1 << nbase);\",\n \" for (int i = 0; i < (1 << nbase); ++i) rev[i] = (rev[i >> 1] >> 1) + ((i & 1) << (nbase - 1));\",\n \" roots.resize(1 << nbase);\",\n \" while (base < nbase) {\",\n \" Modular z = root.pow(1 << (max_base - 1 - base));\",\n \" for (int i = 1 << (base - 1); i < (1 << base); ++i) {\",\n \" roots[i << 1] = roots[i];\",\n \" roots[i << 1 | 1] = roots[i] * z;\",\n \" }\",\n \" ++base;\",\n \" }\",\n \" }\",\n \" static void fft(vector <Modular> &a) {\",\n \" int n = (int) a.size();\",\n \" assert((n & (n - 1)) == 0);\",\n \" int zeros = __builtin_ctz(n);\",\n \" ensure_base(zeros);\",\n \" int shift = base - zeros;\",\n \" for (int i = 0; i < n; ++i) if (i < (rev[i] >> shift)) swap(a[i], a[rev[i] >> shift]);\",\n \" for (int k = 1; k < n; k <<= 1) {\",\n \" for (int i = 0; i < n; i += k << 1) {\",\n \" for (int j = 0; j < k; j++) {\",\n \" Modular x = a[i + j];\",\n \" Modular y = a[i + j + k] * roots[j + k];\",\n \" a[i + j] = x + y;\",\n \" a[i + j + k] = x - y;\",\n \" }\",\n \" }\",\n \" }\",\n \" }\",\n \" static vector <Modular> multiply(vector <Modular> a, vector <Modular> b) {\",\n \" if (a.empty() || b.empty()) return {};\",\n \" int eq = (a == b);\",\n \" int need = (int) a.size() + (int) b.size() - 1;\",\n \" int nbase = 0;\",\n \" while ((1 << nbase) < need) ++nbase;\",\n \" ensure_base(nbase);\",\n \" int sz = 1 << nbase;\",\n \" a.resize(sz); b.resize(sz);\",\n \" fft(a);\",\n \" if (eq) b = a;\",\n \" else fft(b);\",\n \" Modular inv_sz = static_cast<Modular>(sz).inv();\",\n \" for (int i = 0; i < sz; ++i) a[i] *= b[i] * inv_sz;\",\n \" reverse(a.begin() + 1, a.end());\",\n \" fft(a);\",\n \" a.resize(need);\",\n \" return a;\",\n \" }\",\n \"};\",\n \"template <typename Modular> int NTT<Modular>::md;\",\n \"template <typename Modular> Modular NTT<Modular>::root;\",\n \"template <typename Modular> int NTT<Modular>::base;\",\n \"template <typename Modular> int NTT<Modular>::max_base;\",\n \"template <typename Modular> vector<Modular> NTT<Modular>::roots;\",\n \"template <typename Modular> vector<int> NTT<Modular>::rev;\",\n \"template <typename Modular> vector <Modular> inverse(const vector <Modular> &a) {\",\n \" assert(!a.empty());\",\n \" int n = (int) a.size();\",\n \" vector <Modular> b = {a[0].inv()};\",\n \" while ((int) b.size() < n) {\",\n \" vector <Modular> x(a.begin(), a.begin() + min(a.size(), b.size() << 1));\",\n \" x.resize(b.size() << 1); b.resize(b.size() << 1);\",\n \" vector <Modular> c = b;\",\n \" NTT<Modular>::fft(c); NTT<Modular>::fft(x);\",\n \" Modular inv = static_cast<Modular>((int)x.size()).inv();\",\n \" for (int i = 0; i < (int) x.size(); ++i) x[i] *= c[i] * inv;\",\n \" reverse(x.begin() + 1, x.end());\",\n \" NTT<Modular>::fft(x);\",\n \" rotate(x.begin(), x.begin() + (x.size() >> 1), x.end());\",\n \" fill(x.begin() + (x.size() >> 1), x.end(), 0);\",\n \" NTT<Modular>::fft(x);\",\n \" for (int i = 0; i < (int) x.size(); ++i) x[i] *= c[i] * inv;\",\n \" reverse(x.begin() + 1, x.end());\",\n \" NTT<Modular>::fft(x);\",\n \" for (int i = 0; i < (int) x.size() >> 1; ++i) b[i + ((int)x.size() >> 1)] = -x[i];\",\n \" }\",\n \" b.resize(n);\",\n \" return b;\",\n \"}\",\n \"template <typename Modular> vector <Modular> inverse_old(vector <Modular> a) {\",\n \" assert(!a.empty());\",\n \" int n = a.size();\",\n \" if (n == 1) return { a[0].inv() };\",\n \" int m = (n + 1) >> 1;\",\n \" vector <Modular> b = inverse(vector<Modular>(a.begin(), a.begin() + m));\",\n \" int need = n << 1, nbase = 0;\",\n \" while ((1 << nbase) < need) ++nbase;\",\n \" NTT<Modular>::ensure_base(nbase);\",\n \" int size = 1 << nbase;\",\n \" a.resize(size); b.resize(size);\",\n \" NTT<Modular>::fft(a); NTT<Modular>::fft(b);\",\n \" Modular inv = static_cast<Modular>(size).inv();\",\n \" for (int i = 0; i < size; ++i) a[i] = (2 - a[i] * b[i]) * b[i] * inv;\",\n \" reverse(a.begin() + 1, a.end());\",\n \" NTT<Modular>::fft(a);\",\n \" a.resize(n);\",\n \" return a;\",\n \"}\",\n \"template <typename Modular> vector <Modular> operator * (const vector <Modular> &a, const vector <Modular> &b) {\",\n \" if (a.empty() || b.empty()) return {};\",\n \" if (min(a.size(), b.size()) < 150) {\",\n \" vector <Modular> c(a.size() + b.size() - 1, 0);\",\n \" for (int i = 0; i < (int) a.size(); ++i)\",\n \" for (int j = 0; j < (int) b.size(); j++)\",\n \" c[i + j] += a[i] * b[j];\",\n \" return c;\",\n \" }\",\n \" return NTT<Modular>::multiply(a, b);\",\n \"}\",\n \"template <typename Modular> vector <Modular> & operator *= (vector<Modular> &a, const vector <Modular> &b) { return a = a * b; }\",\n \"}\",\n \"using NUMBER_THEORETIC_TRANSFORM::operator *;\",\n \"using NUMBER_THEORETIC_TRANSFORM::operator *=;\"\n ],\n \"description\": \"NUMBER_THEORETIC_TRANSFORM\"\n },\n \"FAST_FOURIER_TRANSFORM\": {\n \"scope\": \"cpp\",\n \"prefix\": \"FAST_FOURIER_TRANSFORM\",\n \"body\": [\n \"namespace FAST_FOURIER_TRANSFORM {\",\n \"typedef long double dbl;\",\n \"struct num {\",\n \" dbl x, y;\",\n \" num() { x = y = 0; }\",\n \" num(dbl x_, dbl y_) : x(x_), y(y_) {}\",\n \"};\",\n \"num operator + (num a, num b) { return num(a.x + b.x, a.y + b.y); }\",\n \"num operator - (num a, num b) { return num(a.x - b.x, a.y - b.y); }\",\n \"num operator * (num a, num b) { return num(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x); }\",\n \"num conj(num a) { return num(a.x, -a.y); }\",\n \"int base = 1;\",\n \"vector <num> roots = {{0, 0}, {1, 0}};\",\n \"vector <int> rev = {0, 1};\",\n \"const dbl PI = static_cast<dbl>(acosl(-1.0));\",\n \"void ensure_base(int nbase) {\",\n \" if (nbase <= base) return;\",\n \" rev.resize(1 << nbase);\",\n \" for (int i = 0; i < (1 << nbase); ++i) rev[i] = (rev[i >> 1] >> 1) + ((i & 1) << (nbase - 1));\",\n \" roots.resize(1 << nbase);\",\n \" while (base < nbase) {\",\n \" dbl angle = 2 * PI / (1 << (base + 1));\",\n \" for (int i = 1 << (base - 1); i < (1 << base); ++i) {\",\n \" roots[i << 1] = roots[i];\",\n \" dbl angle_i = angle * (2 * i + 1 - (1 << base));\",\n \" roots[(i << 1) + 1] = num(cos(angle_i), sin(angle_i));\",\n \" }\",\n \" base++;\",\n \" }\",\n \"}\",\n \"void fft(vector <num> &a, int n = -1) {\",\n \" if (n == -1) n = (int) a.size();\",\n \" assert((n & (n - 1)) == 0);\",\n \" int zeros = __builtin_ctz(n);\",\n \" ensure_base(zeros);\",\n \" int shift = base - zeros;\",\n \" for (int i = 0; i < n; ++i) if (i < (rev[i] >> shift)) swap(a[i], a[rev[i] >> shift]);\",\n \" for (int k = 1; k < n; k <<= 1) {\",\n \" for (int i = 0; i < n; i += k << 1) {\",\n \" for (int j = 0; j < k; ++j) {\",\n \" num z = a[i + j + k] * roots[j + k];\",\n \" a[i + j + k] = a[i + j] - z;\",\n \" a[i + j] = a[i + j] + z;\",\n \" }\",\n \" }\",\n \" }\",\n \"}\",\n \"vector <num> fa, fb;\",\n \"vector <long long> square(const vector <int> &a) {\",\n \" if (a.empty()) return {};\",\n \" int need = (int) a.size() + (int) a.size() - 1, nbase = 1;\",\n \" while ((1 << nbase) < need) ++nbase;\",\n \" ensure_base(nbase);\",\n \" int sz = 1 << nbase;\",\n \" if ((sz >> 1) > (int) fa.size()) fa.resize(sz >> 1);\",\n \" for (int i = 0; i < (sz >> 1); ++i) {\",\n \" int x = (2 * i < (int)a.size() ? a[2 * i] : 0);\",\n \" int y = (2 * i + 1 < (int)a.size() ? a[2 * i + 1] : 0);\",\n \" fa[i] = num(x, y);\",\n \" }\",\n \" fft(fa, sz >> 1);\",\n \" num r(1.0 / (sz >> 1), 0.0);\",\n \" for (int i = 0; i <= (sz >> 2); ++i) {\",\n \" int j = ((sz >> 1) - i) & ((sz >> 1) - 1);\",\n \" num fe = (fa[i] + conj(fa[j])) * num(0.5, 0);\",\n \" num fo = (fa[i] - conj(fa[j])) * num(0, -0.5);\",\n \" num aux = fe * fe + fo * fo * roots[(sz >> 1) + i] * roots[(sz >> 1) + i];\",\n \" num tmp = fe * fo;\",\n \" fa[i] = r * (conj(aux) + num(0, 2) * conj(tmp));\",\n \" fa[j] = r * (aux + num(0, 2) * tmp);\",\n \" }\",\n \" fft(fa, sz >> 1);\",\n \" vector<long long> res(need);\",\n \" for (int i = 0; i < need; ++i) res[i] = llround(i % 2 == 0 ? fa[i >> 1].x : fa[i >> 1].y);\",\n \" return res;\",\n \"}\",\n \"vector <long long> multiply(const vector <int> &a, const vector <int> &b) {\",\n \" if (a.empty() || b.empty()) return {};\",\n \" if (a == b) return square(a);\",\n \" int need = (int) a.size() + (int) b.size() - 1, nbase = 1;\",\n \" while ((1 << nbase) < need) ++nbase;\",\n \" ensure_base(nbase);\",\n \" int sz = 1 << nbase;\",\n \" if (sz > (int) fa.size()) fa.resize(sz);\",\n \" for (int i = 0; i < sz; ++i) {\",\n \" int x = (i < (int)a.size() ? a[i] : 0);\",\n \" int y = (i < (int)b.size() ? b[i] : 0);\",\n \" fa[i] = num(x, y);\",\n \" }\",\n \" fft(fa, sz);\",\n \" num r(0, -0.25 / (sz >> 1));\",\n \" for (int i = 0; i <= (sz >> 1); ++i) {\",\n \" int j = (sz - i) & (sz - 1);\",\n \" num z = (fa[j] * fa[j] - conj(fa[i] * fa[i])) * r;\",\n \" fa[j] = (fa[i] * fa[i] - conj(fa[j] * fa[j])) * r;\",\n \" fa[i] = z;\",\n \" }\",\n \" for (int i = 0; i < (sz >> 1); ++i) {\",\n \" num A0 = (fa[i] + fa[i + (sz >> 1)]) * num(0.5, 0);\",\n \" num A1 = (fa[i] - fa[i + (sz >> 1)]) * num(0.5, 0) * roots[(sz >> 1) + i];\",\n \" fa[i] = A0 + A1 * num(0, 1);\",\n \" }\",\n \" fft(fa, sz >> 1);\",\n \" vector <long long> res(need);\",\n \" for (int i = 0; i < need; ++i) res[i] = llround(i % 2 == 0 ? fa[i >> 1].x : fa[i >> 1].y);\",\n \" return res;\",\n \"}\",\n \"vector <int> multiply_mod(const vector<int> &a, const vector<int> &b, int m) {\",\n \" if (a.empty() || b.empty()) return {};\",\n \" int eq = (a.size() == b.size() && a == b);\",\n \" int need = (int)a.size() + (int)b.size() - 1, nbase = 0;\",\n \" while ((1 << nbase) < need) ++nbase;\",\n \" ensure_base(nbase);\",\n \" int sz = 1 << nbase;\",\n \" if (sz > (int) fa.size()) fa.resize(sz);\",\n \" for (int i = 0; i < (int) a.size(); ++i) {\",\n \" int x = (a[i] % m + m) % m;\",\n \" fa[i] = num(x & ((1 << 15) - 1), x >> 15);\",\n \" }\",\n \" fill(fa.begin() + a.size(), fa.begin() + sz, num{0, 0});\",\n \" fft(fa, sz);\",\n \" if (sz > (int) fb.size()) fb.resize(sz);\",\n \" if (eq) copy(fa.begin(), fa.begin() + sz, fb.begin());\",\n \" else {\",\n \" for (int i = 0; i < (int)b.size(); ++i) {\",\n \" int x = (b[i] % m + m) % m;\",\n \" fb[i] = num(x & ((1 << 15) - 1), x >> 15);\",\n \" }\",\n \" fill(fb.begin() + b.size(), fb.begin() + sz, num{0, 0});\",\n \" fft(fb, sz);\",\n \" }\",\n \" dbl ratio = 0.25 / sz;\",\n \" num r2(0, -1);\",\n \" num r3(ratio, 0);\",\n \" num r4(0, -ratio);\",\n \" num r5(0, 1);\",\n \" for (int i = 0; i <= (sz >> 1); ++i) {\",\n \" int j = (sz - i) & (sz - 1);\",\n \" num a1 = (fa[i] + conj(fa[j]));\",\n \" num a2 = (fa[i] - conj(fa[j])) * r2;\",\n \" num b1 = (fb[i] + conj(fb[j])) * r3;\",\n \" num b2 = (fb[i] - conj(fb[j])) * r4;\",\n \" if (i != j) {\",\n \" num c1 = (fa[j] + conj(fa[i]));\",\n \" num c2 = (fa[j] - conj(fa[i])) * r2;\",\n \" num d1 = (fb[j] + conj(fb[i])) * r3;\",\n \" num d2 = (fb[j] - conj(fb[i])) * r4;\",\n \" fa[i] = c1 * d1 + c2 * d2 * r5;\",\n \" fb[i] = c1 * d2 + c2 * d1;\",\n \" }\",\n \" fa[j] = a1 * b1 + a2 * b2 * r5;\",\n \" fb[j] = a1 * b2 + a2 * b1;\",\n \" }\",\n \" fft(fa, sz);\",\n \" fft(fb, sz);\",\n \" vector<int> res(need);\",\n \" for (int i = 0; i < need; ++i) {\",\n \" long long aa = llround(fa[i].x);\",\n \" long long bb = llround(fb[i].x);\",\n \" long long cc = llround(fa[i].y);\",\n \" res[i] = static_cast<int>((aa + ((bb % m) << 15) + ((cc % m) << 30)) % m);\",\n \" }\",\n \" return res;\",\n \"}\",\n \"template <typename Modular> vector <Modular> operator * (const vector <Modular> &a, const vector <Modular> &b) {\",\n \" if (a.empty() || b.empty()) return {};\",\n \" if (min(a.size(), b.size()) < 150) {\",\n \" vector <Modular> c(a.size() + b.size() - 1, 0);\",\n \" for (int i = 0; i < (int)a.size(); ++i)\",\n \" for (int j = 0; j < (int)b.size(); ++j)\",\n \" c[i + j] += a[i] * b[j];\",\n \" return c;\",\n \" }\",\n \" vector <int> a_mul(a.size());\",\n \" for (int i = 0; i < (int) a.size(); ++i) a_mul[i] = static_cast<int>(a[i]);\",\n \" vector <int> b_mul(b.size());\",\n \" for (int i = 0; i < (int) b.size(); ++i) b_mul[i] = static_cast<int>(b[i]);\",\n \" vector <int> c_mul = multiply_mod(a_mul, b_mul, Modular::mod());\",\n \" vector <Modular> c(c_mul.size());\",\n \" for (int i = 0; i < (int) c.size(); ++i) c[i] = c_mul[i];\",\n \" return c;\",\n \"}\",\n \"template <typename Modular> vector <Modular> & operator *= (vector <Modular> &a, const vector <Modular> &b) { return a = a * b; }\",\n \"}\",\n \"using FAST_FOURIER_TRANSFORM::square;\",\n \"using FAST_FOURIER_TRANSFORM::multiply;\",\n \"using FAST_FOURIER_TRANSFORM::multiply_mod;\",\n \"using FAST_FOURIER_TRANSFORM::operator *;\",\n \"using FAST_FOURIER_TRANSFORM::operator *=;\"\n ],\n \"description\": \"FAST_FOURIER_TRANSFORM\"\n },\n \"MODINT\": {\n \"scope\": \"cpp\",\n \"prefix\": \"MODINT\",\n \"body\": [\n \"namespace MODINT {\",\n \"struct barrett {\",\n \" unsigned int _m;\",\n \" unsigned long long im;\",\n \" explicit barrett(unsigned int m) : _m(m), im((unsigned long long)(-1) / m + 1) {}\",\n \" unsigned int umod() const { return _m; };\",\n \" unsigned int mul(unsigned int a, unsigned int b) const {\",\n \" unsigned long long z = a; z *= b;\",\n \" unsigned long long x = (unsigned long long)(((unsigned __int128) z * im) >> 64);\",\n \" unsigned long long y = x * _m;\",\n \" return (unsigned int)(z - y + (z < y ? _m : 0));\",\n \" }\",\n \"};\",\n \"template <class T> T invGeneral(T a, T b) {\",\n \" a %= b;\",\n \" if (!a) return b == 1 ? 0 : -1;\",\n \" T x = invGeneral(b, a);\",\n \" return x == -1 ? -1 : ((1 - 1LL * b * x) / a + b) % b;\",\n \"}\",\n \"template <int m, enable_if_t<1 <= m>* = nullptr>\",\n \"struct static_modint {\",\n \"using mint = static_modint;\",\n \"public:\",\n \" static constexpr int mod() { return m; }\",\n \" static mint raw(int v) {\",\n \" mint x; x.v = v;\",\n \" return x;\",\n \" }\",\n \" static_modint(): v(0) {}\",\n \" template <class T> static_modint(T x) {\",\n \" int y;\",\n \" if (x < 0) {\",\n \" if (x < -mod()) y = x % mod();\",\n \" else y = x;\",\n \" if (y < 0) y += mod();\",\n \" } else {\",\n \" if (x < mod()) y = x;\",\n \" else y = x % mod();\",\n \" }\",\n \" v = y;\",\n \" }\",\n \" unsigned int val() const { return v; }\",\n \" unsigned int operator () () const { return v; }\",\n \" mint & operator ++ () { if (++v == umod()) v = 0; return *this; }\",\n \" mint & operator -- () { if (!v) v = umod(); --v; return *this; }\",\n \" mint operator ++ (int) { mint old = *this; ++*this; return old; }\",\n \" mint operator -- (int) { mint old = *this; --*this; return old; }\",\n \" mint operator + () { return *this; }\",\n \" mint operator - () { return raw(!v ? 0 : umod() - v); }\",\n \" mint & operator += (const mint &rhs) { v += rhs.v; if (v >= umod()) v -= umod(); return *this; }\",\n \" mint & operator -= (const mint &rhs) { v -= rhs.v; if (v >= umod()) v += umod(); return *this; }\",\n \" mint & operator *= (const mint &rhs) {\",\n \" unsigned long long z = v; z *= rhs.v; v = z % umod();\",\n \" return *this;\",\n \" }\",\n \" mint & operator /= (const mint &rhs) { return *this *= rhs.inv(); }\",\n \" friend mint operator + (const mint &lhs, const mint &rhs) { return mint(lhs) += rhs; }\",\n \" friend mint operator - (const mint &lhs, const mint &rhs) { return mint(lhs) -= rhs; }\",\n \" friend mint operator * (const mint &lhs, const mint &rhs) { return mint(lhs) *= rhs; }\",\n \" friend mint operator / (const mint &lhs, const mint &rhs) { return mint(lhs) /= rhs; }\",\n \" mint pow(long long n) const {\",\n \" assert(0 <= n);\",\n \" mint res = 1, a = *this;\",\n \" for (; n; n >>= 1, a *= a) if (n & 1) res *= a;\",\n \" return res;\",\n \" }\",\n \" mint inv() const {\",\n \" int i = invGeneral((int) v, mod());\",\n \" assert(~i);\",\n \" return i;\",\n \" }\",\n \" friend bool operator == (const mint& lhs, const mint& rhs) { return lhs.v == rhs.v; }\",\n \" friend bool operator != (const mint& lhs, const mint& rhs) { return lhs.v != rhs.v; }\",\n \" friend ostream & operator << (ostream &out, const mint &x) { return out << x.v; }\",\n \" friend istream & operator >> (istream &in, mint &x) { long long a; in >> a; x = a; return in; }\",\n \" explicit operator bool() const { return v; }\",\n \" explicit operator int() const { return v; }\",\n \"private:\",\n \" unsigned int v;\",\n \" static constexpr unsigned int umod() { return m; }\",\n \"};\",\n \"template <int id> struct dynamic_modint {\",\n \"using mint = dynamic_modint;\",\n \"public:\",\n \" static int mod() { return (int) bt.umod(); }\",\n \" static void set_mod(int m) {\",\n \" assert(1 <= m);\",\n \" bt = barrett(m);\",\n \" }\",\n \" static mint raw(int v) {\",\n \" mint x; x.v = v;\",\n \" return x;\",\n \" }\",\n \" dynamic_modint(): v(0) {}\",\n \" template <class T> dynamic_modint(T x) {\",\n \" int y;\",\n \" if (x < 0) {\",\n \" if (x < -mod()) y = x % mod();\",\n \" else y = x;\",\n \" if (y < 0) y += mod();\",\n \" } else {\",\n \" if (x < mod()) y = x;\",\n \" else y = x % mod();\",\n \" }\",\n \" v = y;\",\n \" }\",\n \" unsigned int val() const { return v; }\",\n \" unsigned int operator () () const { return v; }\",\n \" mint & operator ++ () { if (++v == umod()) v = 0; return *this; }\",\n \" mint & operator -- () { if (!v) v = umod(); --v; return *this; }\",\n \" mint operator ++ (int) { mint old = *this; ++*this; return old; }\",\n \" mint operator -- (int) { mint old = *this; --*this; return old; }\",\n \" mint operator + () { return *this; }\",\n \" mint operator - () { return raw(!v ? 0 : umod() - v); }\",\n \" mint & operator += (const mint &rhs) { v += rhs.v; if (v >= umod()) v -= umod(); return *this; }\",\n \" mint & operator -= (const mint &rhs) { v -= rhs.v; if (v >= umod()) v += umod(); return *this; }\",\n \" mint & operator *= (const mint &rhs) {\",\n \" v = bt.mul(v, rhs.v);\",\n \" return *this;\",\n \" }\",\n \" mint & operator /= (const mint &rhs) { return *this *= rhs.inv(); }\",\n \" friend mint operator + (const mint &lhs, const mint &rhs) { return mint(lhs) += rhs; }\",\n \" friend mint operator - (const mint &lhs, const mint &rhs) { return mint(lhs) -= rhs; }\",\n \" friend mint operator * (const mint &lhs, const mint &rhs) { return mint(lhs) *= rhs; }\",\n \" friend mint operator / (const mint &lhs, const mint &rhs) { return mint(lhs) /= rhs; }\",\n \" mint pow(long long n) const {\",\n \" assert(0 <= n);\",\n \" mint res = 1, a = *this;\",\n \" for (; n; n >>= 1, a *= a) if (n & 1) res *= a;\",\n \" return res;\",\n \" }\",\n \" mint inv() const {\",\n \" int i = invGeneral((int) v, mod());\",\n \" assert(~i);\",\n \" return i;\",\n \" }\",\n \" friend bool operator == (const mint& lhs, const mint& rhs) { return lhs.v == rhs.v; }\",\n \" friend bool operator != (const mint& lhs, const mint& rhs) { return lhs.v != rhs.v; }\",\n \" friend ostream & operator << (ostream &out, const mint &x) { return out << x.v; }\",\n \" friend istream & operator >> (istream &in, mint &x) { long long a; in >> a; x = a; return in; }\",\n \" explicit operator bool() const { return v; }\",\n \" explicit operator int() const { return v; }\",\n \"private:\",\n \" unsigned int v;\",\n \" static barrett bt;\",\n \" static unsigned int umod() { return bt.umod(); }\",\n \"};\",\n \"template <int id> barrett dynamic_modint<id>::bt(998244353);\",\n \"using modint998244353 = static_modint<998244353>;\",\n \"using modint1000000007 = static_modint<1000000007>;\",\n \"using modint = dynamic_modint <-1>;\",\n \"using Modular = modint1000000007;\",\n \"} using namespace MODINT;\"\n ],\n \"description\": \"MODINT\"\n },\n \"MO_ALGORITHM\": {\n \"scope\": \"cpp\",\n \"prefix\": \"MO_ALGORITHM\",\n \"body\": [\n \"long long gilbertOrder(int x, int y, int p, int r) {\",\n \" if (p == 0) return 0;\",\n \" int h = 1 << (p - 1);\",\n \" int s = x < h ? y < h ? 0 : 3 : y < h ? 1 : 2;\",\n \" s = (s + r) & 3;\",\n \" const int d[4] = {3, 0, 0, 1};\",\n \" int nx = x & (x ^ h), ny = y & (y ^ h);\",\n \" int nrot = (r + d[s]) & 3;\",\n \" long long t = 1LL << (2 * p - 2);\",\n \" long long ans = s * t;\",\n \" long long add = gilbertOrder(nx, ny, p - 1, nrot);\",\n \" ans += s == 1 || s == 2 ? add : t - add - 1;\",\n \" return ans;\",\n \"}\",\n \"\",\n \"struct Query {\",\n \" int l, r, idx;\",\n \" long long ord;\",\n \" void calcOrder() { ord = gilbertOrder(l, r, 21, 0); }\",\n \"};\"\n ],\n \"description\": \"MO_ALGORITHM\"\n },\n \"MIN_COST_FLOW\": {\n \"scope\": \"cpp\",\n \"prefix\": \"MIN_COST_FLOW\",\n \"body\": [\n \"namespace MAX_FLOW {\",\n \"template <class Cap, class Cost> struct CEdge {\",\n \" int from, to;\",\n \" Cap cap, flow;\",\n \" Cost cost;\",\n \" int nxt;\",\n \" CEdge(int from = 0, int to = 0, Cap cap = 0, Cost cost = 0, int nxt = 0): from(from), to(to), cap(cap), flow(0), cost(cost), nxt(nxt) {}\",\n \"};\",\n \"\",\n \"template <typename Cap, typename Cost> struct MinCostFlow {\",\n \" static constexpr Cap inf_cap = numeric_limits<Cap>::max();\",\n \" static constexpr Cost inf_cost = numeric_limits<Cost>::max() >> 1;\",\n \" int n;\",\n \" vector <CEdge <Cap, Cost>> edges;\",\n \" vector <Cost> d, pot;\",\n \" priority_queue <pair <Cost, int>> q;\",\n \" vector <int> trace, head;\",\n \" MinCostFlow(int n_ = 0): n(n_), d(n), pot(n, 0), trace(n), head(n, -1) {}\",\n \" int add(int from, int to, Cap cap, Cost cost) {\",\n \" int id = edges.size();\",\n \" edges.emplace_back(from, to, cap, cost, head[from]);\",\n \" head[from] = id;\",\n \" edges.emplace_back(to, from, 0, -cost, head[to]);\",\n \" head[to] = id + 1;\",\n \" return id;\",\n \" }\",\n \" void expath(int st) {\",\n \" fill(d.begin(), d.end(), inf_cost);\",\n \" while (!q.empty()) q.pop();\",\n \" d[st] = 0;\",\n \" q.push({pot[st], st});\",\n \" while (!q.empty()) {\",\n \" auto [du, u] = q.top();\",\n \" q.pop();\",\n \" if (du != pot[u] - d[u]) continue;\",\n \" for (int i = head[u]; i != -1; i = edges[i].nxt) {\",\n \" int v = edges[i].to;\",\n \" if (edges[i].cap != edges[i].flow && d[u] + edges[i].cost < d[v]) {\",\n \" d[v] = d[u] + edges[i].cost;\",\n \" trace[v] = i;\",\n \" q.push({pot[v] - d[v], v});\",\n \" }\",\n \" }\",\n \" }\",\n \" swap(d, pot);\",\n \" }\",\n \" pair <Cap, Cost> max_flow(int s, int t) {\",\n \" Cap flow = 0;\",\n \" Cost cost = 0;\",\n \" bool ok = true;\",\n \" for (auto &e: edges) {\",\n \" if (e.cap != e.flow && e.cost + pot[e.from] - pot[e.to] < 0) {\",\n \" ok = false;\",\n \" break;\",\n \" }\",\n \" }\",\n \" if (ok) {\",\n \" expath(s);\",\n \" } else {\",\n \" vector <int> deg(n, 0);\",\n \" for (int u = 0; u < n; ++u) {\",\n \" for (int i = head[u]; i != -1; i = edges[i].nxt) {\",\n \" if (edges[i].cap != edges[i].flow) ++deg[edges[i].to];\",\n \" }\",\n \" }\",\n \" vector <int> que;\",\n \" for (int i = 0; i < n; ++i) if (!deg[i]) que.push_back(i);\",\n \" for (int b = 0; b < (int) que.size(); ++b) {\",\n \" for (int i = head[que[b]]; i != -1; i = edges[i].nxt) if (edges[i].cap != edges[i].flow) {\",\n \" --deg[edges[i].to];\",\n \" if (!deg[edges[i].to]) que.push_back(edges[i].to);\",\n \" }\",\n \" }\",\n \" fill(pot.begin(), pot.end(), inf_cost);\",\n \" pot[s] = 0;\",\n \" if ((int) que.size() == n) {\",\n \" for (int u: que) if (pot[u] < inf_cost) {\",\n \" for (int i = head[u]; i != -1; i = edges[i].nxt) {\",\n \" if (edges[i].cap != edges[i].flow && pot[u] + edges[i].cost < pot[edges[i].to]) {\",\n \" pot[edges[i].to] = pot[u] + edges[i].cost;\",\n \" trace[edges[i].to] = i;\",\n \" }\",\n \" }\",\n \" }\",\n \" } else {\",\n \" que.assign(1, s);\",\n \" vector <bool> in_queue(n, false);\",\n \" in_queue[s] = true;\",\n \" for (int b = 0; b < (int) que.size(); ++b) {\",\n \" int u = que[b];\",\n \" in_queue[u] = false;\",\n \" for (int i = head[u]; i != -1; i = edges[i].nxt) {\",\n \" if (edges[i].cap != edges[i].flow && pot[u] + edges[i].cost < pot[edges[i].to]) {\",\n \" pot[edges[i].to] = pot[u] + edges[i].cost;\",\n \" trace[edges[i].to] = i;\",\n \" if (!in_queue[edges[i].to]) {\",\n \" que.push_back(edges[i].to);\",\n \" in_queue[edges[i].to] = true;\",\n \" }\",\n \" }\",\n \" }\",\n \" }\",\n \" }\",\n \" }\",\n \" while (pot[t] < inf_cost) {\",\n \" Cap push = inf_cap;\",\n \" for (int u = t; u != s; u = edges[trace[u]].from) {\",\n \" push = min(push, edges[trace[u]].cap - edges[trace[u]].flow);\",\n \" }\",\n \" for (int u = t; u != s; u = edges[trace[u]].from) {\",\n \" edges[trace[u]].flow += push;\",\n \" edges[trace[u] ^ 1].flow -= push;\",\n \" }\",\n \" flow += push;\",\n \" cost += push * pot[t];\",\n \" expath(s);\",\n \" }\",\n \" return {flow, cost};\",\n \" }\",\n \"};\",\n \"} using namespace MAX_FLOW;\"\n ],\n \"description\": \"MIN_COST_FLOW\"\n },\n \"MAXMIN\": {\n \"scope\": \"cpp\",\n \"prefix\": \"MAXMIN\",\n \"body\": [\n \"template <class A, class B> bool minimize(A &a, B b) { return a > b ? a = b, true : false; }\",\n \"template <class A, class B> bool maximize(A &a, B b) { return a < b ? a = b, true : false; }\"\n ],\n \"description\": \"MAXMIN\"\n },\n \"MATRIX\": {\n \"scope\": \"cpp\",\n \"prefix\": \"MATRIX\",\n \"body\": [\n \"template <class T> struct Matrix {\",\n \" int numRow, numCol; vector <T> val;\",\n \" // accessors\",\n \" typename vector<T>::iterator operator [] (int r) { return val.begin() + r * numCol; }\",\n \" inline T & at(int r, int c) { return val[r * numCol + c]; }\",\n \" inline T get(int r, int c) const { return val[r * numCol + c]; }\",\n \" // constructors\",\n \" Matrix() {}\",\n \" Matrix(int r, int c): numRow(r), numCol(c), val(r * c) {}\",\n \" Matrix(const vector <vector <T>> &d) {\",\n \" numRow = d.size();\",\n \" numCol = numRow ? d[0].size() : 0;\",\n \" val.reserve(numRow * numCol);\",\n \" for (int i = 0; i < numRow; ++i) {\",\n \" assert((int) d[i].size() == numCol);\",\n \" copy(d[i].begin(), d[i].end(), back_inserter(val));\",\n \" }\",\n \" }\",\n \" Matrix & set_value(T v) {\",\n \" fill(val.begin(), val.end(), v);\",\n \" return *this;\",\n \" }\",\n \" // convert to 2D vector\",\n \" vector <vector <T>> vecvec(void) const {\",\n \" vector <vector <T>> res(numRow);\",\n \" for (int i = 0; i < numRow; ++i) {\",\n \" res[i].reserve(numCol);\",\n \" copy(val.begin() + i * numCol, val.begin() + (i + 1) * numCol, back_inserter(res[i]));\",\n \" }\",\n \" return res;\",\n \" }\",\n \" operator vector <vector <T>> () const { return vecvec(); }\",\n \" static Matrix identity(int n) {\",\n \" Matrix res(n, n);\",\n \" for (int i = 0; i < n; ++i) res.at(i, i) = T(1);\",\n \" return res;\",\n \" }\",\n \" friend istream & operator >> (istream &in, Matrix &res) {\",\n \" for (T &x: res.val) in >> x;\",\n \" return in;\",\n \" }\",\n \" friend ostream & operator << (ostream &out, const Matrix &res) {\",\n \" for (int i = 0; i < res.numRow * res.numCol; ++i)\",\n \" out << res.val[i] << \\\" \\\\n\\\"[i % res.numCol == res.numCol - 1];\",\n \" return out;\",\n \" }\",\n \" Matrix operator - (void) const {\",\n \" Matrix res(numRow, numCol);\",\n \" for (int i = 0; i < numRow * numCol; ++i) res.val[i] = -val[i];\",\n \" return res;\",\n \" }\",\n \" Matrix operator * (const T &v) const {\",\n \" Matrix res = *this;\",\n \" for (T &x: res.val) x *= v;\",\n \" return res;\",\n \" }\",\n \" Matrix operator / (const T &v) const {\",\n \" Matrix res = *this;\",\n \" for (T &x: res.val) x /= v;\",\n \" return res;\",\n \" }\",\n \" Matrix operator + (const Matrix &other) const {\",\n \" int M = numRow, N = numCol;\",\n \" assert(M == other.numRow); assert(N == other.numCol);\",\n \" Matrix res = *this;\",\n \" for (int i = 0; i < numRow * numCol; ++i) res.val[i] += other.val[i];\",\n \" return res;\",\n \" }\",\n \" Matrix operator - (const Matrix &other) const {\",\n \" int M = numRow, N = numCol;\",\n \" assert(M == other.numRow); assert(N == other.numCol);\",\n \" Matrix res = *this;\",\n \" for (int i = 0; i < numRow * numCol; ++i) res.val[i] -= other.val[i];\",\n \" return res;\",\n \" }\",\n \" Matrix operator * (const Matrix &other) const {\",\n \" int M = numRow, N = numCol, P = other.numCol;\",\n \" assert(N == other.numRow);\",\n \"\",\n \" Matrix res(M, P);\",\n \" if (!M || !N || !P) return res;\",\n \" for (int i = 0; i < M; ++i) {\",\n \" T *resRow = res.val.data() + i * P;\",\n \" const T *aRow = this->val.data() + i * N;\",\n \" for (int k = 0; k < N; ++k) {\",\n \" T a = aRow[k];\",\n \" const T *bRow = other.val.data() + k * P;\",\n \" for (int j = 0; j < P; ++j) resRow[j] += a * bRow[j];\",\n \" }\",\n \" }\",\n \" return res;\",\n \" }\",\n \" Matrix & operator *= (const T &v) {\",\n \" for (T &x: val) x *= v;\",\n \" return *this;\",\n \" }\",\n \" Matrix & operator /= (const T &v) {\",\n \" for (T &x: val) x /= v;\",\n \" return *this;\",\n \" }\",\n \" Matrix & operator += (const Matrix &other) {\",\n \" int M = numRow, N = numCol;\",\n \" assert(M == other.numRow); assert(N == other.numCol);\",\n \" for (int i = 0; i < M * N; ++i) val[i] += other.val[i];\",\n \" return *this;\",\n \" }\",\n \" Matrix & operator -= (const Matrix &other) {\",\n \" int M = numRow, N = numCol;\",\n \" assert(M == other.numRow); assert(N == other.numCol);\",\n \" for (int i = 0; i < M * N; ++i) val[i] -= other.val[i];\",\n \" return *this;\",\n \" }\",\n \" Matrix & operator *= (const Matrix &other) { return *this = *this * other; }\",\n \" Matrix pow(long long Exp) const {\",\n \" int M = numRow;\",\n \" assert(M == numCol); assert(Exp >= 0);\",\n \" Matrix res = identity(M);\",\n \" if (!Exp) return res;\",\n \" bool is_id = true;\",\n \" for (int i = 63 - __builtin_clzll(Exp); i >= 0; --i) {\",\n \" if (!is_id) res *= res;\",\n \" if (Exp >> i & 1) res *= *this, is_id = false;\",\n \" }\",\n \" return res;\",\n \" }\",\n \" Matrix transpose(void) const {\",\n \" Matrix res(numCol, numRow);\",\n \" for (int i = 0; i < numRow; ++i)\",\n \" for (int j = 0; j < numCol; ++j)\",\n \" res.at(j, i) = this->get(i, j);\",\n \" return res;\",\n \" }\",\n \"};\"\n ],\n \"description\": \"MATRIX\"\n },\n \"LINE_CONTAINER\": {\n \"scope\": \"cpp\",\n \"prefix\": \"LINE_CONTAINER\",\n \"body\": [\n \"struct Line {\",\n \" mutable long long k, m, p;\",\n \" Line(long long k, long long m, long long p): k(k), m(m), p(p) {}\",\n \" bool operator < (const Line& o) const { return k < o.k; }\",\n \" bool operator < (long long x) const { return p < x; }\",\n \"};\",\n \"struct LineContainer: multiset <Line, less<>> {\",\n \" // (for doubles, use inf = 1/.0, div(a,b) = a/b)\",\n \" static const long long inf = 4e18;\",\n \" long long div(long long a, long long b) { // floored division\",\n \" return a / b - ((a ^ b) < 0 && a % b);\",\n \" }\",\n \" bool isect(iterator x, iterator y) {\",\n \" if (y == end()) return x->p = inf, 0;\",\n \" if (x->k == y->k) x->p = x->m > y->m ? inf : -inf;\",\n \" else x->p = div(y->m - x->m, x->k - y->k);\",\n \" return x->p >= y->p;\",\n \" }\",\n \" void add(long long k, long long m) {\",\n \" auto z = emplace(k, m, 0), y = z++, x = y;\",\n \" while (isect(y, z)) z = erase(z);\",\n \" if (x != begin() && isect(--x, y)) isect(x, y = erase(y));\",\n \" while ((y = x) != begin() && (--x)->p >= y->p)\",\n \" isect(x, erase(y));\",\n \" }\",\n \" long long query(long long x) {\",\n \" assert(!empty());\",\n \" auto l = *lower_bound(x);\",\n \" return l.k * x + l.m;\",\n \" }\",\n \"};\"\n ],\n \"description\": \"LINE_CONTAINER\"\n },\n \"LICHAO_TREE\": {\n \"scope\": \"cpp\",\n \"prefix\": \"LICHAO_TREE\",\n \"body\": [\n \"// not tested yet\",\n \"template<\",\n \" class T, // for segment & coordinates data types, e.g. long long\",\n \" class TM // for intermediate computations, e.g. __int128_t\",\n \"> \",\n \"struct LichaoTree {\",\n \" struct Line {\",\n \" T a, b;\",\n \" int id;\",\n \" bool is_valid;\",\n \" Line(T a, T b, int id, bool is_valid): a(a), b(b), id(id), is_valid(is_valid) {}\",\n \" TM eval(T x) { return TM(a) * x + b; }\",\n \" };\",\n \" struct Result {\",\n \" T line_a, line_b;\",\n \" int line_id;\",\n \" bool is_valid;\",\n \" TM min_val;\",\n \" Result(T a, T b, int id, bool iv, TM m): line_a(a), line_b(b), line_id(id), is_valid(iv), min_val(m) {}\",\n \" };\",\n \" int n, size, log;\",\n \" vector <T> xs;\",\n \" vector <Line> lines;\",\n \" LichaoTree(const vector <T> &_xs): xs(_xs) {\",\n \" sort(xs.begin(), xs.end());\",\n \" xs.erase(unique(ALL(xs)), xs.end());\",\n \" n = xs.size();\",\n \" log = 0;\",\n \" while ((1 << log) < n) ++log;\",\n \" size = 1 << log;\",\n \" xs.resize(size, xs.back());\",\n \" lines.assign(size << 1, Line(0, 0, -1, false));\",\n \" }\",\n \" void update(int i, int l, int r, int u, int v, Line line) {\",\n \" if (l >= v || r <= u) return;\",\n \" if (u <= l && r <= v) {\",\n \" if (!lines[i].is_valid) {\",\n \" lines[i] = line;\",\n \" return;\",\n \" }\",\n \" int m = l + r >> 1;\",\n \" bool lef = line.eval(l) < lines[i].eval(l);\",\n \" bool mid = line.eval(m) < lines[i].eval(m);\",\n \" if (mid) swap(lines[i], line);\",\n \" if (r - l == 1) return;\",\n \" i << 1;\",\n \" if (lef != mid) i <<= 1, r = m;\",\n \" else i = i << 1 | 1, l = m;\",\n \" return;\",\n \" }\",\n \" int m = l + r >> 1;\",\n \" update(i << 1, l, m, u, v, line);\",\n \" update(i << 1 | 1, m, r, u, v, line);\",\n \" };\",\n \" void add_line(T a, T b, int id = -1) {\",\n \" update(1, 0, size, 0, size, Line(a, b, id, true));\",\n \" }\",\n \" void add_segment(T l, T r, T a, T b, int id = -1) {\",\n \" l = lower_bound(ALL(xs), l) - xs.begin();\",\n \" r = upper_bound(ALL(xs), r) - xs.begin();\",\n \" if (l >= r) return;\",\n \" update(1, 0, size, l, r, Line(a, b, id, true));\",\n \" }\",\n \" Result get(T x) {\",\n \" int i = lower_bound(xs.begin(), xs.end(), x) - xs.begin();\",\n \" Line res = lines[i];\",\n \" TM val = res.eval(x);\",\n \" for (i += size; (i >>= 1) > 0; ) if (lines[i].is_valid) {\",\n \" TM cur = lines[i].eval(x);\",\n \" if (!res.is_valid || val > cur) res = lines[i], val = cur;\",\n \" }\",\n \" return Result(res.a, res.b, res.id, res.is_valid, val);\",\n \" }\",\n \"};\"\n ],\n \"description\": \"LICHAO_TREE\"\n },\n \"LCA_RMQ\": {\n \"scope\": \"cpp\",\n \"prefix\": \"LCA_RMQ\",\n \"body\": [\n \"struct LCA {\",\n \" int n, root;\",\n \" vector <vector <int>> adj;\",\n \" vector <int> tin, tout, depth;\",\n \" vector <pair <int, int>> order;\",\n \" vector <vector <int>> rmq;\",\n \" LCA(const vector <vector <int>> & _adj, int _root): n(_adj.size()), root(_root), adj(_adj) { build(); }\",\n \" LCA(const vector <vector <pair <int, int>>> & _adj, int _root): n(_adj.size()), root(_root) {\",\n \" adj.resize(n);\",\n \" for (int u = 0; u < (int) adj.size(); ++u) {\",\n \" adj[u].reserve(_adj[u].size());\",\n \" for (auto [w, v]: _adj[u]) adj[u].push_back(v);\",\n \" }\",\n \" build();\",\n \" }\",\n \" void build(void) {\",\n \" assert(0 <= root && root < n);\",\n \" tin.resize(n);\",\n \" tout.resize(n);\",\n \" depth.resize(n);\",\n \" order.reserve(2 * n - 1);\",\n \" depth[root] = 0;\",\n \" rmq.emplace_back(0);\",\n \" dfs(root, -1);\",\n \" int m = rmq[0].size();\",\n \" for (int k = 1; (1 << k) <= m; ++k) {\",\n \" rmq.emplace_back(m - (1 << k) + 1);\",\n \" for (int i = 0; i + (1 << k) <= m; ++i) rmq[k][i] = op(rmq[k - 1][i], rmq[k - 1][i + (1 << (k - 1))]);\",\n \" }\",\n \" }\",\n \" bool is_anc(int x, int y) { return tin[x] <= tin[y] && tout[y] <= tout[x]; }\",\n \" int op(int x, int y) { return depth[x] < depth[y] ? x : y; }\",\n \" void dfs(int u, int par) {\",\n \" tin[u] = rmq[0].size();\",\n \" rmq[0].push_back(u);\",\n \" for (int v: adj[u]) if (v != par) {\",\n \" depth[v] = depth[u] + 1;\",\n \" dfs(v, u);\",\n \" rmq[0].push_back(u);\",\n \" }\",\n \" tout[u] = rmq[0].size();\",\n \" }\",\n \" int lca(int u, int v) {\",\n \" assert(0 <= u && u < n);\",\n \" assert(0 <= v && v < n);\",\n \" u = tin[u]; v = tin[v];\",\n \" if (u > v) swap(u, v);\",\n \" int h = __lg(v - u + 1);\",\n \" return op(rmq[h][u], rmq[h][v - (1 << h) + 1]);\",\n \" }\",\n \"};\"\n ],\n \"description\": \"LCA_RMQ\"\n },\n \"LCA_BL\": {\n \"scope\": \"cpp\",\n \"prefix\": \"LCA_BL\",\n \"body\": [\n \"struct LCA {\",\n \" int n, root, t, log;\",\n \" vector <vector <int>> adj, anc;\",\n \" vector <int> tin, tout, depth;\",\n \" LCA(const vector <vector <int>> & _adj, int _root): n(_adj.size()), root(_root), adj(_adj) { build(); }\",\n \" LCA(const vector <vector <pair <int, int>>> & _adj, int _root): n(_adj.size()), root(_root) {\",\n \" adj.resize(n);\",\n \" for (int u = 0; u < (int) adj.size(); ++u) {\",\n \" adj[u].reserve(_adj[u].size());\",\n \" for (auto [w, v]: _adj[u]) adj[u].push_back(v);\",\n \" }\",\n \" build();\",\n \" }\",\n \" void build(void) {\",\n \" assert(0 <= root && root < n);\",\n \" log = 1;\",\n \" while ((1 << log) < n) ++log;\",\n \" anc.resize(n, vector<int>(log, -1));\",\n \" tin.resize(n);\",\n \" tout.resize(n);\",\n \" depth.resize(n);\",\n \" depth[root] = 0;\",\n \" t = 0;\",\n \" dfs(root);\",\n \" }\",\n \" void dfs(int u) {\",\n \" tin[u] = t++;\",\n \" for (int v: adj[u]) if (v != anc[u][0]) {\",\n \" anc[v][0] = u;\",\n \" for (int i = 1; i < log; ++i) {\",\n \" anc[v][i] = anc[anc[v][i - 1]][i - 1];\",\n \" if (anc[v][i] == -1) break;\",\n \" }\",\n \" depth[v] = depth[u] + 1;\",\n \" dfs(v);\",\n \" }\",\n \" tout[u] = t;\",\n \" }\",\n \" int lca(int u, int v) {\",\n \" assert(0 <= u && u < n);\",\n \" assert(0 <= v && v < n);\",\n \" if (depth[u] < depth[v]) swap(u, v);\",\n \" int h = depth[u] - depth[v];\",\n \" for (int i = 0; i < log; ++i) if (h >> i & 1) u = anc[u][i];\",\n \" if (u == v) return u;\",\n \" for (int i = log - 1; i >= 0; --i) if (anc[u][i] != anc[v][i]) {\",\n \" u = anc[u][i];\",\n \" v = anc[v][i];\",\n \" }\",\n \" return anc[u][0];\",\n \" }\",\n \"};\"\n ],\n \"description\": \"LCA_BL\"\n },\n \"LAZY_SEGTREE\": {\n \"scope\": \"cpp\",\n \"prefix\": \"LAZY_SEGTREE\",\n \"body\": [\n \"template <\",\n \" class S, // node data type\",\n \" S (*op) (const S&, const S&), // combine 2 nodes\",\n \" S (*e) (), // identity element\",\n \" class F, // lazy propagation tag\",\n \" void (*mapping) (const F&, S&), // apply tag F on a node\",\n \" void (*composition) (const F&, F&), // combine 2 tags\",\n \" F (*id)() // identity tag\",\n \" >\",\n \"struct LazySegTree {\",\n \" LazySegTree() : LazySegTree(0) {}\",\n \" LazySegTree(int n) : LazySegTree(vector<S>(n, e())) {}\",\n \" LazySegTree(const vector <S> &v) : n(v.size()) {\",\n \" log = 0;\",\n \" while ((1 << log) < n) ++log;\",\n \" size = 1 << log;\",\n \" d = vector<S>(size << 1, e());\",\n \" lz = vector<F>(size, id());\",\n \" for (int i = 0; i < n; ++i) d[i + size] = v[i];\",\n \" for (int i = size - 1; i > 0; --i) update(i);\",\n \" }\",\n \" LazySegTree(vector <S> &&v) : n(v.size()) {\",\n \" log = 0;\",\n \" while ((1 << log) < n) ++log;\",\n \" size = 1 << log;\",\n \" d = vector<S>(size << 1, e());\",\n \" lz = vector<F>(size, id());\",\n \" for (int i = 0; i < n; ++i) d[i + size] = move(v[i]);\",\n \" for (int i = size - 1; i > 0; --i) update(i);\",\n \" }\",\n \"\",\n \" // 0 <= p < n\",\n \" void set(int p, const S &x) {\",\n \" assert(0 <= p && p < n);\",\n \" p += size;\",\n \" for (int i = log; i > 0; --i) push(p >> i);\",\n \" d[p] = x;\",\n \" for (int i = 1; i <= log; ++i) update(p >> i);\",\n \" }\",\n \"\",\n \" // 0 <= p < n\",\n \" void set(int p, S &&x) {\",\n \" assert(0 <= p && p < n);\",\n \" p += size;\",\n \" for (int i = log; i > 0; --i) push(p >> i);\",\n \" d[p] = move(x);\",\n \" for (int i = 1; i <= log; ++i) update(p >> i);\",\n \" }\",\n \"\",\n \" // 0 <= p < n\",\n \" const S& get(int p) {\",\n \" assert(0 <= p && p < n);\",\n \" p += size;\",\n \" for (int i = log; i > 0; --i) push(p >> i);\",\n \" return d[p];\",\n \" }\",\n \"\",\n \" // Get product in range [l, r-1]\",\n \" // 0 <= l <= r <= n\",\n \" // For empty segment (l == r) -> return e()\",\n \" S prod(int l, int r) {\",\n \" assert(0 <= l && l <= r && r <= n);\",\n \" if (l == r) return e();\",\n \" l += size; r += size;\",\n \" for (int i = log; i > 0; --i) {\",\n \" if (((l >> i) << i) != l) push(l >> i);\",\n \" if (((r >> i) << i) != r) push((r - 1) >> i);\",\n \" }\",\n \" S sml = e(), smr = e();\",\n \" while (l < r) {\",\n \" if (l & 1) sml = op(sml, d[l++]);\",\n \" if (r & 1) smr = op(d[--r], smr);\",\n \" l >>= 1; r >>= 1;\",\n \" }\",\n \" return op(sml, smr);\",\n \" }\",\n \"\",\n \" const S& all_prod() { return d[1]; }\",\n \"\",\n \" // 0 <= p < n\",\n \" void apply(int p, const F &f) {\",\n \" assert(0 <= p && p < n);\",\n \" p += size;\",\n \" for (int i = log; i > 0; --i) push(p >> i);\",\n \" mapping(f, d[p]);\",\n \" for (int i = 1; i <= log; ++i) update(p >> i);\",\n \" }\",\n \"\",\n \" // Apply f on all elements in range [l, r-1]\",\n \" // 0 <= l <= r <= n\",\n \" void apply(int l, int r, const F &f) {\",\n \" assert(0 <= l && l <= r && r <= n);\",\n \" if (l == r) return;\",\n \" l += size; r += size;\",\n \" for (int i = log; i > 0; --i) {\",\n \" if (((l >> i) << i) != l) push(l >> i);\",\n \" if (((r >> i) << i) != r) push((r - 1) >> i);\",\n \" }\",\n \" int l2 = l, r2 = r;\",\n \" while (l < r) {\",\n \" if (l & 1) all_apply(l++, f);\",\n \" if (r & 1) all_apply(--r, f);\",\n \" l >>= 1; r >>= 1;\",\n \" }\",\n \" l = l2; r = r2;\",\n \" for (int i = 1; i <= log; ++i) {\",\n \" if (((l >> i) << i) != l) update(l >> i);\",\n \" if (((r >> i) << i) != r) update((r - 1) >> i);\",\n \" }\",\n \" }\",\n \"\",\n \" // Binary search on SegTree to find largest r:\",\n \" // f(op(a[l] .. a[r-1])) = true (assuming empty array is always true)\",\n \" // f(op(a[l] .. a[r])) = false (assuming op(..., a[n]), which is out of bound, is always false)\",\n \" template <bool (*g)(const S&)> int max_right(int l) { return max_right(l, [](const S &x) { return g(x); }); }\",\n \" template <class G> int max_right(int l, G g) {\",\n \" assert(0 <= l && l <= n);\",\n \" assert(g(e()));\",\n \" if (l == n) return n;\",\n \" l += size;\",\n \" for (int i = log; i > 0; --i) push(l >> i);\",\n \" S sm = e();\",\n \" do {\",\n \" while (!(l & 1)) l >>= 1;\",\n \" if (!g(op(sm, d[l]))) {\",\n \" while (l < size) {\",\n \" push(l);\",\n \" l = l << 1;\",\n \" if (g(op(sm, d[l]))) {\",\n \" sm = op(sm, d[l]);\",\n \" l++;\",\n \" }\",\n \" }\",\n \" return l - size;\",\n \" }\",\n \" sm = op(sm, d[l]);\",\n \" l++;\",\n \" } while ((l & -l) != l);\",\n \" return n;\",\n \" }\",\n \"\",\n \" // Binary search on SegTree to find smallest l:\",\n \" // f(op(a[l] .. a[r-1])) = true (assuming empty array is always true)\",\n \" // f(op(a[l-1] .. a[r-1])) = false (assuming op(a[-1], ..), which is out of bound, is always false)\",\n \" template <bool (*g)(const S&)> int min_left(int r) { return min_left(r, [](const S &x) { return g(x); }); }\",\n \" template <class G> int min_left(int r, G g) {\",\n \" assert(0 <= r && r <= n);\",\n \" assert(g(e()));\",\n \" if (!r) return 0;\",\n \" r += size;\",\n \" for (int i = log; i > 0; --i) push((r - 1) >> i);\",\n \" S sm = e();\",\n \" do {\",\n \" r--;\",\n \" while (r > 1 && (r & 1)) r >>= 1;\",\n \" if (!g(op(d[r], sm))) {\",\n \" while (r < size) {\",\n \" push(r);\",\n \" r = r << 1 | 1;\",\n \" if (g(op(d[r], sm))) {\",\n \" sm = op(d[r], sm);\",\n \" r--;\",\n \" }\",\n \" }\",\n \" return r + 1 - size;\",\n \" }\",\n \" sm = op(d[r], sm);\",\n \" } while ((r & -r) != r);\",\n \" return 0;\",\n \" }\",\n \"\",\n \"private:\",\n \" int n, size, log;\",\n \" vector<S> d;\",\n \" vector<F> lz;\",\n \" void update(int k) { d[k] = op(d[k << 1], d[k << 1 | 1]); }\",\n \" void all_apply(int k, const F &f) {\",\n \" mapping(f, d[k]);\",\n \" if (k < size) composition(f, lz[k]);\",\n \" }\",\n \" void push(int k) {\",\n \" all_apply(k << 1, lz[k]);\",\n \" all_apply(k << 1 | 1, lz[k]);\",\n \" lz[k] = id();\",\n \" }\",\n \"};\"\n ],\n \"description\": \"LAZY_SEGTREE\"\n },\n \"KMP\": {\n \"scope\": \"cpp\",\n \"prefix\": [\n \"KMP\",\n \"KNUTH_MORRIS_PRATT\"\n ],\n \"body\": [\n \"template <typename T> vector <int> kmp_table(int n, const T &s) {\",\n \" vector<int> pi(n);\",\n \" for (int i = 1; i < n; i++) {\",\n \" int &j = pi[i];\",\n \" j = pi[i - 1];\",\n \" while (j > 0 && s[i] != s[j]) j = pi[j - 1];\",\n \" if (s[i] == s[j]) j++;\",\n \" }\",\n \" return pi;\",\n \"}\",\n \"template <typename T> vector <int> kmp_table(const T &s) { return kmp_table(s.size(), s); }\",\n \"template <typename T> vector <int> kmp_search(int n, const T &s, int m, const T &w, const vector <int> &pi) {\",\n \" assert(n >= 1 && (int) pi.size() == n);\",\n \" vector <int> res;\",\n \" int j = 0;\",\n \" for (int i = 0; i < m; i++) {\",\n \" while (j > 0 && (j == n || w[i] != s[j])) j = pi[j - 1];\",\n \" if (w[i] == s[j]) j++;\",\n \" if (j == n) res.push_back(i - n + 1);\",\n \" }\",\n \" return res;\",\n \"}\",\n \"template <typename T> vector <int> kmp_search(const T &s, const T &w, const vector <int> &pi) { return kmp_search(s.size(), s, w.size(), w, pi); }\"\n ],\n \"description\": \"KMP\"\n },\n \"GRAPH\": {\n \"scope\": \"cpp\",\n \"prefix\": \"GRAPH\",\n \"body\": [\n \"namespace GRAPH {\",\n \"template <typename T> class graph {\",\n \"public:\",\n \" struct edge {\",\n \" int from, to; T cost;\",\n \" edge(int from, int to, T cost): from(from), to(to), cost(cost) {}\",\n \" };\",\n \" vector <edge> edges;\",\n \" int n;\",\n \" vector <vector<int>> adj;\",\n \" graph(int _n): n(_n), adj(_n) {}\",\n \" virtual int add(int from, int to, T cost) = 0;\",\n \"};\",\n \"template <typename T> class undigraph: public graph<T> {\",\n \"public:\",\n \" using graph<T>::edges, graph<T>::adj, graph<T>::n;\",\n \" undigraph(int _n): graph<T>(_n) {}\",\n \" int add(int u, int v, T cost = 1) {\",\n \" assert(0 <= u && u < n && 0 <= v && v < n);\",\n \" int i = (int) edges.size();\",\n \" adj[u].push_back(i);\",\n \" adj[v].push_back(i);\",\n \" edges.emplace_back(u, v, cost);\",\n \" return i;\",\n \" }\",\n \"};\",\n \"template <typename T> class forest: public graph<T> {\",\n \"public:\",\n \" using graph<T>::edges, graph<T>::adj, graph<T>::n;\",\n \" forest(int _n): graph<T>(_n) {}\",\n \" int add(int u, int v, T cost = 1) {\",\n \" assert(0 <= u && u < n && 0 <= v && v < n);\",\n \" int i = (int) edges.size();\",\n \" adj[u].push_back(i);\",\n \" adj[v].push_back(i);\",\n \" edges.emplace_back(u, v, cost);\",\n \" return i;\",\n \" }\",\n \"};\",\n \"template <typename T> class dfs_undigraph: public undigraph<T> {\",\n \"public:\",\n \" using undigraph<T>::edges, undigraph<T>::adj, undigraph<T>::n;\",\n \" vector <int> par, par_e, order, tin, tout, sz, root, depth, min_depth, was;\",\n \" vector<T> dist;\",\n \" int attempt;\",\n \" dfs_undigraph(int _n): undigraph<T>(_n) {}\",\n \" void init() {\",\n \" par = par_e = tin = tout = root = depth = min_depth = was = vector<int>(n, -1);\",\n \" order.clear();\",\n \" sz = vector<int>(n, 0);\",\n \" dist = vector<T>(n);\",\n \" attempt = 0;\",\n \" }\",\n \" void clear() {\",\n \" par.clear(); par_e.clear(); order.clear(); tin.clear(); tout.clear(); sz.clear();\",\n \" root.clear(); depth.clear(); min_depth.clear(); dist.clear(); was.clear();\",\n \" }\",\n \"private:\",\n \" void do_dfs(int u) {\",\n \" was[u] = attempt;\",\n \" tin[u] = (int) order.size();\",\n \" order.push_back(u);\",\n \" sz[u] = 1;\",\n \" min_depth[u] = depth[u];\",\n \" for (int i: adj[u]) if (i != par_e[u]) {\",\n \" auto &e = edges[i];\",\n \" int v = e.from ^ e.to ^ u;\",\n \" if (was[v] == attempt) min_depth[u] = min(min_depth[u], depth[v]);\",\n \" else {\",\n \" root[v] = root[u];\",\n \" par[v] = u;\",\n \" par_e[v] = i;\",\n \" depth[v] = depth[u] + 1;\",\n \" dist[v] = dist[u] + e.cost;\",\n \" do_dfs(v);\",\n \" sz[u] += sz[v];\",\n \" min_depth[u] = min(min_depth[u], min_depth[v]);\",\n \" }\",\n \" }\",\n \" tout[u] = order.size();\",\n \" }\",\n \" void dfs_from(int u) {\",\n \" ++attempt;\",\n \" depth[u] = 0; dist[u] = T{}; root[u] = u;\",\n \" par[u] = par_e[u] = -1;\",\n \" do_dfs(u);\",\n \" }\",\n \"public:\",\n \" void dfs(int u, bool clear_order = true) {\",\n \" if (par.empty()) init();\",\n \" else if (clear_order) order.clear();\",\n \" dfs_from(u);\",\n \" }\",\n \" void dfs_all() {\",\n \" init();\",\n \" for (int u = 0; u < n; u++) if (depth[u] == -1) dfs_from(u);\",\n \" }\",\n \"};\",\n \"template <typename T> class dfs_forest: public forest<T> {\",\n \"public:\",\n \" using forest<T>::edges, forest<T>::adj, forest<T>::n;\",\n \" vector <int> par, par_e, order, tin, tout, sz, root, depth;\",\n \" vector<T> dist;\",\n \" dfs_forest(int _n): forest<T>(_n) {}\",\n \" void init() {\",\n \" par = par_e = tin = tout = root = depth = vector<int>(n, -1);\",\n \" order.clear();\",\n \" sz = vector<int>(n, 0);\",\n \" dist = vector<T>(n);\",\n \" }\",\n \" void clear() {\",\n \" par.clear(); par_e.clear(); order.clear(); tin.clear();\",\n \" tout.clear(); sz.clear(); root.clear(); depth.clear();\",\n \" }\",\n \"private:\",\n \" void do_dfs(int u) {\",\n \" tin[u] = order.size();\",\n \" order.push_back(u);\",\n \" sz[u] = 1;\",\n \" for (int i: adj[u]) if (i != par_e[u]) {\",\n \" auto &e = edges[i];\",\n \" int v = e.from ^ e.to ^ u;\",\n \" root[v] = (root[u] != -1 ? root[u]: v);\",\n \" par[v] = u;\",\n \" par_e[v] = i;\",\n \" depth[v] = depth[u] + 1;\",\n \" dist[v] = dist[u] + e.cost;\",\n \" do_dfs(v);\",\n \" sz[u] += sz[v];\",\n \" }\",\n \" tout[u] = order.size();\",\n \" }\",\n \" void dfs_from(int u) {\",\n \" depth[u] = 0;\",\n \" dist[u] = T{};\",\n \" root[u] = u;\",\n \" par[u] = par_e[u] = -1;\",\n \" do_dfs(u);\",\n \" }\",\n \"public:\",\n \" void dfs(int u, bool clear_order = true) {\",\n \" if (par.empty()) init();\",\n \" else if (clear_order) order.clear();\",\n \" dfs_from(u);\",\n \" }\",\n \" void dfs_all() {\",\n \" init();\",\n \" for (int u = 0; u < n; u++) if (depth[u] == -1) dfs_from(u);\",\n \" }\",\n \" bool is_anc(int x, int y) { return tin[x] <= tin[y] && tout[y] <= tout[x]; }\",\n \"};\",\n \"template <typename T> class lca_binlift_forest: public dfs_forest<T> {\",\n \"public:\",\n \" using dfs_forest<T>::adj, dfs_forest<T>::n, dfs_forest<T>::par, dfs_forest<T>::depth, dfs_forest<T>::is_anc, dfs_forest<T>::root;\",\n \" int h;\",\n \" vector <vector <int>> anc;\",\n \" lca_binlift_forest(int _n): dfs_forest<T>(_n) {}\",\n \" void build_lca() {\",\n \" assert(!par.empty());\",\n \" int max_depth = *max_element(depth.begin(), depth.end());\",\n \" h = 1; while ((1 << h) <= max_depth) h++;\",\n \" anc.resize(n);\",\n \" for (int i = 0; i < n; ++i) {\",\n \" anc[i].resize(h);\",\n \" anc[i][0] = par[i];\",\n \" }\",\n \" for (int j = 1; j < h; j++) for (int i = 0; i < n; ++i)\",\n \" anc[i][j] = (anc[i][j - 1] == -1 ? -1: anc[anc[i][j - 1]][j - 1]);\",\n \" }\",\n \" int go_up(int x, int up) {\",\n \" up = min(up, (1 << h) - 1);\",\n \" for (int j = h; j-- > 0; ) if (up & (1 << j)) {\",\n \" x = anc[x][j];\",\n \" if (x == -1) break;\",\n \" }\",\n \" return x;\",\n \" }\",\n \" int lca(int x, int y) {\",\n \" if (root[x] != root[y]) return -1;\",\n \" if (is_anc(x, y)) return x;\",\n \" if (is_anc(y, x)) return y;\",\n \" for (int j = h; j-- > 0; ) if (anc[x][j] != -1 && !is_anc(anc[x][j], y)) x = anc[x][j];\",\n \" return anc[x][0];\",\n \" }\",\n \"};\",\n \"template <typename T> class lca_rmq_forest: public dfs_forest<T> {\",\n \"public:\",\n \" using dfs_forest<T>::edges, dfs_forest<T>::adj, dfs_forest<T>::n, dfs_forest<T>::par, dfs_forest<T>::depth, dfs_forest<T>::root;\",\n \" lca_rmq_forest(int _n): dfs_forest<T>(_n) {}\",\n \" void build_lca() {\",\n \" assert(!par.empty());\",\n \" pos.resize(n, -1);\",\n \" rmq.emplace_back(0);\",\n \" for (int i = 0; i < n; ++i) if (root[i] == i) do_dfs(i);\",\n \" int m = rmq[0].size();\",\n \" for (int k = 1; (1 << k) <= m; ++k) {\",\n \" rmq.emplace_back(m - (1 << k) + 1);\",\n \" for (int i = 0; i + (1 << k) <= m; ++i) rmq[k][i] = op(rmq[k - 1][i], rmq[k - 1][i + (1 << (k - 1))]);\",\n \" }\",\n \" }\",\n \"private:\",\n \" int h;\",\n \" vector <vector <int>> rmq;\",\n \" vector <int> pos;\",\n \" int op(int x, int y) { return depth[x] < depth[y] ? x : y; }\",\n \" void do_dfs(int u) {\",\n \" pos[u] = rmq[0].size();\",\n \" rmq[0].push_back(u);\",\n \" for (int i: adj[u]) {\",\n \" auto &e = edges[i];\",\n \" int v = e.from ^ e.to ^ u;\",\n \" if (v == par[u]) continue;\",\n \" do_dfs(v);\",\n \" rmq[0].push_back(u);\",\n \" }\",\n \" }\",\n \"public:\",\n \" int lca(int u, int v) {\",\n \" if (root[u] != root[v]) return -1;\",\n \" u = pos[u]; v = pos[v];\",\n \" if (u > v) swap(u, v);\",\n \" int h = __lg(v - u + 1);\",\n \" return op(rmq[h][u], rmq[h][v - (1 << h) + 1]);\",\n \" }\",\n \"};\",\n \"template <typename T> class hld_forest: public dfs_forest<T> {\",\n \"public:\",\n \" using dfs_forest<T>::edges, dfs_forest<T>::adj, dfs_forest<T>::n, dfs_forest<T>::par, dfs_forest<T>::depth, dfs_forest<T>::sz, dfs_forest<T>::tin, dfs_forest<T>::order, dfs_forest<T>::root, dfs_forest<T>::dfs, dfs_forest<T>::dfs_all;\",\n \" vector <int> head, visited;\",\n \" hld_forest(int _n) : dfs_forest<T>(_n), visited(_n) {}\",\n \" void build_hld(const vector <int> &vs) {\",\n \" for (int tries = 0; tries < 2; ++tries) {\",\n \" if (vs.empty()) dfs_all();\",\n \" else {\",\n \" order.clear();\",\n \" for (int v: vs) dfs(v, false);\",\n \" assert((int) order.size() == n);\",\n \" }\",\n \" if (tries) break;\",\n \" for (int u = 0; u < n; ++u) {\",\n \" if (adj[u].empty()) continue;\",\n \" int best = -1, bid = 0;\",\n \" for (int i = 0; i < (int) adj[u].size(); ++i) {\",\n \" int id = adj[u][i];\",\n \" int v = edges[id].from ^ edges[id].to ^ u;\",\n \" if (par[v] != u) continue;\",\n \" if (sz[v] > best) {\",\n \" best = sz[v];\",\n \" bid = i;\",\n \" }\",\n \" }\",\n \" swap(adj[u][0], adj[u][bid]);\",\n \" }\",\n \" }\",\n \" head.resize(n);\",\n \" iota(head.begin(), head.end(), 0);\",\n \" for (int i = 0; i < n - 1; ++i) {\",\n \" int x = order[i];\",\n \" int y = order[i + 1];\",\n \" if (par[y] == x) head[y] = head[x];\",\n \" }\",\n \" }\",\n \" void build_hld(int v) { build_hld(vector<int>(1, v)); }\",\n \" void build_hld_all() { build_hld(vector<int>()); }\",\n \" int lca(int u, int v) {\",\n \" if (root[u] != root[v]) return -1;\",\n \" while (head[u] != head[v]) {\",\n \" if (depth[head[u]] < depth[head[v]]) swap(u, v);\",\n \" u = par[head[u]];\",\n \" }\",\n \" return tin[u] < tin[v] ? u : v;\",\n \" }\",\n \" int go_up(int x, int up) {\",\n \" int - up;\",\n \" if (target < 0) return -1;\",\n \" while (depth[head[x]] > target) x = par[head[x]];\",\n \" return order[tin[x] - depth[x] + target];\",\n \" }\",\n \" bool apply_on_path(int u, int v, bool with_lca, function<void(int, int, bool)> f) {\",\n \" // f(u, v, up): up -- whether this part of the path goes up\",\n \" assert(!head.empty());\",\n \" if (root[u] != root[v]) return false;\",\n \" int cnt = 0;\",\n \" while (head[u] != head[v]) {\",\n \" if (depth[head[u]] > depth[head[v]]) {\",\n \" f(tin[head[u]], tin[u], true);\",\n \" u = par[head[u]];\",\n \" } else {\",\n \" visited[cnt++] = v;\",\n \" v = par[head[v]];\",\n \" }\",\n \" }\",\n \" if (tin[u] > tin[v]) f(tin[v], tin[u] - !with_lca, true);\",\n \" else if (tin[u] + !with_lca <= tin[v]) f(tin[u] + !with_lca, tin[v], false);\",\n \" for (int i = cnt - 1; i >= 0; i--) {\",\n \" v = visited[i];\",\n \" f(tin[head[v]], tin[v], false);\",\n \" }\",\n \" return true;\",\n \" }\",\n \"};\",\n \"template <typename T> class digraph: public graph<T> {\",\n \"public:\",\n \" using graph<T>::edges, graph<T>::adj, graph<T>::n;\",\n \" digraph(int _n) : graph<T>(_n) {}\",\n \" int add(int from, int to, T cost = 1) {\",\n \" assert(0 <= from && from < n && 0 <= to && to < n);\",\n \" int i = (int) edges.size();\",\n \" adj[from].push_back(i);\",\n \" edges.push_back({from, to, cost});\",\n \" return i;\",\n \" }\",\n \" digraph<T> reverse() const {\",\n \" digraph <T> rev(n);\",\n \" for (auto &e : edges) rev.add(e.to, e.from, e.cost);\",\n \" return rev;\",\n \" }\",\n \"};\",\n \"template <typename T> vector <bool> find_bridges(const dfs_undigraph <T> &g) {\",\n \" assert(!g.par.empty());\",\n \" vector <bool> bridge(g.edges.size());\",\n \" for (int i = 0; i < g.n; ++i) if (g.par[i] != -1 && g.min_depth[i] == g.depth[i]) bridge[g.par_e[i]] = true;\",\n \" return bridge;\",\n \"}\",\n \"template <typename T> vector <bool> find_cutpoints(const dfs_undigraph <T> &g) {\",\n \" assert(!g.par.empty());\",\n \" vector <bool> cutpoint(g.n);\",\n \" for (int i = 0; i < g.n; ++i) if (g.par[i] != -1 && g.min_depth[i] >= g.depth[g.par[i]]) cutpoint[g.par[i]] = true;\",\n \" vector <int> children(g.n, 0);\",\n \" for (int i = 0; i < g.n; ++i) if (g.par[i] != -1) children[g.par[i]]++;\",\n \" for (int i = 0; i < g.n; ++i) if (g.par[i] == -1 && children[i] < 2) cutpoint[i] = false;\",\n \" return cutpoint;\",\n \"}\",\n \"template <typename T> vector <int> find_bicone(const dfs_undigraph <T> &g, int &cnt) {\",\n \" assert(!g.par.empty());\",\n \" vector <int> groups(g.n);\",\n \" cnt = 0;\",\n \" for (int u: g.order) {\",\n \" if (g.par[u] == -1 || g.min_depth[u] == g.depth[u]) groups[u] = cnt++;\",\n \" else groups[u] = groups[g.par[u]];\",\n \" }\",\n \" return groups;\",\n \"}\",\n \"template <typename T> vector <int> find_biconv(const dfs_undigraph <T> &g, int &cnt) {\",\n \" assert(!g.par.empty());\",\n \" vector <int> vertex_comp(g.n);\",\n \" cnt = 0;\",\n \" for (int u: g.order) {\",\n \" if (g.par[u] == -1) vertex_comp[u] = -1;\",\n \" else if (g.min_depth[u] >= g.depth[g.par[u]]) vertex_comp[u] = cnt++;\",\n \" else vertex_comp[u] = vertex_comp[g.par[u]];\",\n \" }\",\n \" vector <int> edge_comp(g.edges.size(), -1);\",\n \" for (int i = 0; i < (int) g.edges.size(); ++i) {\",\n \" int x = g.edges[i].from;\",\n \" int y = g.edges[i].to;\",\n \" edge_comp[i] = vertex_comp[g.depth[x] > g.depth[y] ? x : y];\",\n \" }\",\n \" return edge_comp;\",\n \"}\",\n \"template <typename T> vector <int> find_mst(const undigraph <T> &g, T &res) {\",\n \" vector <int> order(g.edges.size());\",\n \" iota(order.begin(), order.end(), 0);\",\n \" sort(order.begin(), order.end(), [&g] (int a, int b) {\",\n \" return g.edges[a].cost < g.edges[b].cost;\",\n \" });\",\n \" vector <int> par(g.n, -1);\",\n \" auto find = [&] (auto find, int u) -> int {\",\n \" return par[u] < 0 ? u : par[u] = find(find, par[u]);\",\n \" };\",\n \" auto join = [&] (int u, int v) -> bool {\",\n \" if ((u = find(find, u)) == (v = find(find, v))) return false;\",\n \" if (par[u] > par[v]) swap(u, v);\",\n \" par[u] += par[v];\",\n \" par[v] = u;\",\n \" return true;\",\n \" };\",\n \" vector <int> lst;\",\n \" res = 0;\",\n \" for (int i: order) {\",\n \" auto &e = g.edges[i];\",\n \" if (join(e.from, e.to)) {\",\n \" lst.push_back(i);\",\n \" res += e.cost;\",\n \" }\",\n \" }\",\n \" return lst;\",\n \"}\",\n \"template <typename T> vector <T> dijkstra(const graph <T> &g, int start) {\",\n \" assert(0 <= start && start < g.n);\",\n \" vector <T> dist(g.n, numeric_limits<T>::max());\",\n \" priority_queue <pair <T, int>, vector <pair <T, int>>, greater <pair <T, int>>> pq;\",\n \" pq.emplace(dist[start] = 0, start);\",\n \" while (!pq.empty()) {\",\n \" auto [du, u] = pq.top(); pq.pop();\",\n \" if (dist[u] != du) continue;\",\n \" for (int i: g.adj[u]) {\",\n \" auto &e = g.edges[i];\",\n \" int v = e.from ^ e.to ^ u;\",\n \" if (dist[v] > du + e.cost) pq.emplace(dist[v] = du + e.cost, v);\",\n \" }\",\n \" }\",\n \" return dist;\",\n \"}\",\n \"template <typename T> vector <T> dijkstra(const graph <T> &g, int start, vector <int> &trace) {\",\n \" assert(0 <= start && start < g.n);\",\n \" trace.assign(g.n, -1);\",\n \" vector <T> dist(g.n, numeric_limits<T>::max());\",\n \" priority_queue <pair <T, int>, vector <pair <T, int>>, greater <pair <T, int>>> pq;\",\n \" pq.emplace(dist[start] = 0, start);\",\n \" while (!pq.empty()) {\",\n \" auto [du, u] = pq.top(); pq.pop();\",\n \" if (dist[u] != du) continue;\",\n \" for (int i: g.adj[u]) {\",\n \" auto &e = g.edges[i];\",\n \" int v = e.from ^ e.to ^ u;\",\n \" if (dist[v] > du + e.cost) {\",\n \" trace[v] = i;\",\n \" pq.emplace(dist[v] = du + e.cost, v);\",\n \" }\",\n \" }\",\n \" }\",\n \" return dist;\",\n \"}\",\n \"template <typename T> vector <int> find_eulerian_path(const graph <T> &g, int &root) {\",\n \" if (g.edges.empty()) {\",\n \" root = 0;\",\n \" return vector<int>();\",\n \" }\",\n \" vector <int> in_deg(g.n, 0), out_deg(g.n, 0);\",\n \" for (int i = 0; i < (int) g.edges.size(); ++i) {\",\n \" auto &e = g.edges[i];\",\n \" ++out_deg[e.from]; ++in_deg[e.to];\",\n \" }\",\n \" root = -1;\",\n \" int odd = 0;\",\n \" for (int i = 0; i < g.n; ++i) if ((in_deg[i] + out_deg[i]) & 1) {\",\n \" odd++;\",\n \" if (root == -1 || out_deg[i] - in_deg[i] > out_deg[root] - in_deg[root]) root = i;\",\n \" }\",\n \" if (odd > 2) {\",\n \" root = -1;\",\n \" return vector<int>();\",\n \" }\",\n \" if (root == -1) {\",\n \" root = 0;\",\n \" while (root < g.n && in_deg[root] + out_deg[root] == 0) root++;\",\n \" }\",\n \" vector <bool> used(g.edges.size(), false);\",\n \" vector <int> ptr(g.n, 0), balance(g.n, 0), res(g.edges.size());\",\n \" int stack_ptr = 0, write_ptr = g.edges.size(), u = root;\",\n \" while (true) {\",\n \" bool found = false;\",\n \" while (ptr[u] < (int) g.adj[u].size()) {\",\n \" int i = g.adj[u][ptr[u]++];\",\n \" if (used[i]) continue;\",\n \" used[i] = true;\",\n \" res[stack_ptr++] = i;\",\n \" auto &e = g.edges[i];\",\n \" balance[u]++;\",\n \" u ^= e.from ^ e.to;\",\n \" balance[u]--;\",\n \" found = true;\",\n \" break;\",\n \" }\",\n \" if (!found) {\",\n \" if (!stack_ptr) break;\",\n \" int i = res[--stack_ptr];\",\n \" res[--write_ptr] = i;\",\n \" auto &e = g.edges[i];\",\n \" u ^= e.from ^ e.to;\",\n \" }\",\n \" }\",\n \" int disbalance = 0;\",\n \" for (int i = 0; i < g.n; ++i) disbalance += abs(balance[i]);\",\n \" if (write_ptr != 0 || disbalance > 2) {\",\n \" root = -1;\",\n \" return vector<int>();\",\n \" }\",\n \" return res;\",\n \"}\",\n \"template <typename T> vector <int> find_topsort(const digraph <T> &g) {\",\n \" vector <int> deg(g.n, 0), res;\",\n \" for (int i = 0; i < (int) g.edges.size(); ++i) ++deg[g.edges[i].to];\",\n \" for (int i = 0; i < g.n; ++i) if (!deg[i]) res.push_back(i);\",\n \" for (int i = 0; i < (int) res.size(); i++) {\",\n \" int u = res[i];\",\n \" for (int i: g.adj[u]) {\",\n \" int v = g.edges[i].to;\",\n \" if (!--deg[v]) res.push_back(v);\",\n \" }\",\n \" }\",\n \" if ((int) res.size() != g.n) return vector<int>();\",\n \" return res;\",\n \"}\",\n \"template <typename T> vector <int> tarjan(const digraph <T> &g, int &cnt) {\",\n \" vector <int> low(g.n, -1), num(g.n, -1), groups(g.n, -1);\",\n \" stack <int> st;\",\n \" int t = 0;\",\n \" cnt = 0;\",\n \" auto dfs = [&] (auto dfs, int u) -> void {\",\n \" low[u] = num[u] = t++;\",\n \" st.push(u);\",\n \" for (int i: g.adj[u]) {\",\n \" int v = g.edges[i].to;\",\n \" if (num[v] == -1) {\",\n \" dfs(dfs, v);\",\n \" low[u] = min(low[u], low[v]);\",\n \" } else low[u] = min(low[u], num[v]);\",\n \" }\",\n \" if (low[u] == num[u]) {\",\n \" int v;\",\n \" do {\",\n \" v = st.top(); st.pop();\",\n \" low[v] = num[v] = g.n;\",\n \" groups[v] = cnt;\",\n \" } while (v != u);\",\n \" ++cnt;\",\n \" }\",\n \" };\",\n \" for (int i = 0; i < g.n; ++i) if (num[i] == -1) dfs(dfs, i);\",\n \" return groups;\",\n \"}\",\n \"template <typename T> vector <int> kosaraju(const digraph <T> &g, int &cnt) {\",\n \" digraph <T> g_rev = g.reverse();\",\n \" vector <int> order;\",\n \" vector <bool> visited(g.n);\",\n \" auto dfs1 = [&] (auto dfs1, int u) -> void {\",\n \" visited[u] = true;\",\n \" for (int i: g.adj[u]) {\",\n \" auto &e = g.edges[i];\",\n \" int v = e.to;\",\n \" if (!visited[v]) dfs1(dfs1, v);\",\n \" }\",\n \" order.push_back(u);\",\n \" };\",\n \" for (int i = 0; i < g.n; ++i) if (!visited[i]) dfs1(dfs1, i);\",\n \" vector <int> c(g.n, -1);\",\n \" auto dfs2 = [&] (auto dfs2, int u) -> void {\",\n \" for (int i: g_rev.adj[u]) {\",\n \" auto &e = g_rev.edges[i];\",\n \" int v = e.to;\",\n \" if (c[v] == -1) {\",\n \" c[v] = c[u];\",\n \" dfs2(dfs2, v);\",\n \" }\",\n \" }\",\n \" };\",\n \" cnt = 0;\",\n \" for (int id = g.n; id-- > 0; ) {\",\n \" int i = order[id];\",\n \" if (c[i] != -1) continue;\",\n \" c[i] = cnt++;\",\n \" dfs2(dfs2, i);\",\n \" }\",\n \" return c;\",\n \"}\",\n \"template <typename T> vector<int> find_dominators(const digraph <T> &g, int root) {\",\n \" int n = g.n;\",\n \" vector <int> pos(n, -1), order, parent(n, -1);\",\n \" function <void(int)> dfs = [&g, &pos, &order, &parent, &dfs] (int u) {\",\n \" pos[u] = (int) order.size();\",\n \" order.push_back(u);\",\n \" for (int i: g.adj[u]) {\",\n \" int v = g.edges[i].to;\",\n \" if (pos[v] == -1) {\",\n \" parent[v] = u;\",\n \" dfs(v);\",\n \" }\",\n \" }\",\n \" };\",\n \" dfs(root);\",\n \" vector <int> p(n), best(n), sdom = pos;\",\n \" iota(p.begin(), p.end(), 0);\",\n \" iota(best.begin(), best.end(), 0);\",\n \" function <int(int)> find_best = [&p, &best, &sdom, &find_best] (int x) {\",\n \" if (p[x] != x) {\",\n \" int u = find_best(p[x]);\",\n \" if (sdom[u] < sdom[best[x]]) best[x] = u;\",\n \" p[x] = p[p[x]];\",\n \" }\",\n \" if (sdom[best[p[x]]] < sdom[best[x]]) best[x] = best[p[x]];\",\n \" return best[x];\",\n \" };\",\n \" digraph <T> g_rev = g.reverse();\",\n \" vector <int> idom(n, -1), link(n, 0);\",\n \" vector <vector <int>> bucket(n);\",\n \" for (int i = (int) order.size() - 1; i >= 0; i--) {\",\n \" int u = order[i];\",\n \" for (int i: g_rev.adj[u]) {\",\n \" int v = g_rev.edges[i].to;\",\n \" if (pos[v] != -1) sdom[u] = min(sdom[u], sdom[find_best(v)]);\",\n \" }\",\n \" idom[u] = order[sdom[u]];\",\n \" for (int v: bucket[u]) link[v] = find_best(v);\",\n \" for (int i: g.adj[u]) {\",\n \" int v = g.edges[i].to;\",\n \" if (parent[v] == u) p[v] = u;\",\n \" }\",\n \" bucket[order[sdom[u]]].push_back(u);\",\n \" }\",\n \" for (int i = 1; i < (int) order.size(); ++i) {\",\n \" int u = order[i];\",\n \" idom[u] = idom[link[u]];\",\n \" }\",\n \" return idom;\",\n \"}\",\n \"} using namespace GRAPH;\"\n ],\n \"description\": \"GRAPH\"\n },\n \"HASHING\": {\n \"scope\": \"cpp\",\n \"prefix\": \"HASHING\",\n \"body\": [\n \"namespace HASHING {\",\n \"\",\n \" const int NMOD = 2;\",\n \" const int MOD[] = {(int) 1e9 + 7, (int) 1e9 + 2277, (int) 1e9 + 5277, \",\n \" (int) 1e9 + 8277, (int) 1e9 + 9277};\",\n \" const int BASE = 227; // 311\",\n \" const int capital = 0;\",\n \" const int MAX_SIZE = 1e6 + 6;\",\n \"\",\n \" int pw[NMOD][MAX_SIZE];\",\n \"\",\n \" void prepareHashing(void) {\",\n \" for (int j = 0; j < NMOD; ++j) {\",\n \" pw[j][0] = 1;\",\n \" for (int i = 1; i < MAX_SIZE; ++i)\",\n \" pw[j][i] = 1LL * pw[j][i - 1] * BASE % MOD[j];\",\n \" }\",\n \" }\",\n \"\",\n \" struct Value {\",\n \"\",\n \" int val[NMOD];\",\n \" \",\n \" Value(int x = 0) { for (int i = 0; i < NMOD; ++i) val[i] = x; }\",\n \"\",\n \" Value(char c, int pos) {\",\n \" for (int i = 0; i < NMOD; ++i) \",\n \" val[i] = 1LL * c * pw[i][pos] % MOD[i];\",\n \" }\",\n \"\",\n \" Value shift(int step) const {\",\n \" Value res;\",\n \" for (int i = 0; i < NMOD; ++i)\",\n \" res.val[i] = 1LL * val[i] * pw[i][step] % MOD[i];\",\n \" return res;\",\n \" }\",\n \"\",\n \" Value operator + (const Value &other) const {\",\n \" Value res;\",\n \" for (int i = 0; i < NMOD; ++i) {\",\n \" res.val[i] = val[i] + other.val[i];\",\n \" if (res.val[i] >= MOD[i]) res.val[i] -= MOD[i];\",\n \" }\",\n \" return res;\",\n \" }\",\n \"\",\n \" Value operator - (const Value &other) const {\",\n \" Value res;\",\n \" for (int i = 0; i < NMOD; ++i) {\",\n \" res.val[i] = val[i] - other.val[i];\",\n \" if (res.val[i] < 0) res.val[i] += MOD[i];\",\n \" }\",\n \" return res;\",\n \" }\",\n \"\",\n \" bool operator < (const Value& other) const { \",\n \" for (int i = 0; i < NMOD; ++i)\",\n \" if (val[i] != other.val[i]) return val[i] < other.val[i];\",\n \" return false;\",\n \" }\",\n \"\",\n \" bool operator == (const Value& other) const {\",\n \" for (int i = 0; i < NMOD; ++i)\",\n \" if (val[i] != other.val[i]) return false;\",\n \" return true;\",\n \" }\",\n \" \",\n \" bool operator != (const Value& other) const {\",\n \" for (int i = 0; i < NMOD; ++i) \",\n \" if (val[i] != other.val[i]) return true;\",\n \" return false;\",\n \" }\",\n \" \",\n \" };\",\n \"\",\n \" struct Hash {\",\n \"\",\n \" string S;\",\n \" int len;\",\n \" Value *code, *rev_code;\",\n \"\",\n \" void Init_Hash(bool palin = false) {\",\n \" len = S.size();\",\n \" S = ' ' + S;\",\n \" code = new Value[len + 1];\",\n \" code[0] = 0;\",\n \" if (palin) {\",\n \" rev_code = new Value[len + 1];\",\n \" rev_code[0] = 0;\",\n \" }\",\n \" for (int i = 1; i <= len; ++i) {\",\n \" code[i] = code[i - 1] + Value(S[i] - capital + 1, i);\",\n \" if (palin) rev_code[i] = rev_code[i - 1] + Value(S[len - i + 1] - capital + 1, i);\",\n \" }\",\n \" }\",\n \"\",\n \" Hash() {}\",\n \"\",\n \" Hash(string s, bool palin = false) {\",\n \" S = s;\",\n \" Init_Hash(palin);\",\n \" }\",\n \"\",\n \" int getHash(int l, int r, int mod) const {\",\n \" assert(l <= r && l > 0 && r <= len);\",\n \" int res = code[r].val[mod] - code[l - 1].val[mod];\",\n \" if (res < 0) res += MOD[mod];\",\n \" res = 1LL * res * pw[mod][MAX_SIZE - l] % MOD[mod];\",\n \" return res;\",\n \" }\",\n \"\",\n \" Value getHash(int l, int r) const {\",\n \" assert(l <= r && l > 0 && r <= len);\",\n \" return (code[r] - code[l - 1]).shift(MAX_SIZE - l);\",\n \" }\",\n \"\",\n \" Value getRevHash(int l, int r) {\",\n \" assert(l <= r && l > 0 && r <= len);\",\n \" return (rev_code[r] - rev_code[l - 1]).shift(MAX_SIZE - l);\",\n \" }\",\n \"\",\n \" bool isPalin(int l, int r) {\",\n \" return getHash(l, r) == getRevHash(len - r + 1, len - l + 1);\",\n \" }\",\n \"\",\n \" Value getHash(void) const {\",\n \" return getHash(1, len);\",\n \" }\",\n \"\",\n \" bool operator == (Hash& other) const {\",\n \" return code[len] == other.code[other.len];\",\n \" }\",\n \"\",\n \" bool operator < (Hash& other) const{ \",\n \" return code[len] < other.code[other.len];\",\n \" }\",\n \"\",\n \" bool operator > (Hash& other) const{\",\n \" return !(code[len] < other.code[other.len] || code[len] == other.code[other.len]);\",\n \" }\",\n \"\",\n \" bool cmpSubstr(int l, int r, int u, int v) {\",\n \" assert(l <= r && u <= v); assert(l > 0 && u > 0); assert(r <= len && v <= len);\",\n \" int len = min(r - l + 1, v - u + 1);\",\n \" int max_same = 0;\",\n \" int Min = 1, Max = len;\",\n \" while (Min <= Max) {\",\n \" int mid = Min + Max >> 1;\",\n \" Value F1 = getHash(l, l + mid - 1);\",\n \" Value F2 = getHash(u, u + mid - 1);\",\n \" if (F1 == F2) {\",\n \" max_same = mid;\",\n \" Min = mid + 1;\",\n \" } else Max = mid - 1;\",\n \" }\",\n \" if (max_same == len) return r - l < v - u;\",\n \" return S[l + max_same] < S[u + max_same];\",\n \" }\",\n \"\",\n \" };\",\n \"\",\n \" bool cmpStr(Hash a, Hash b) {\",\n \" int len = min(a.len, b.len);\",\n \" int max_same = 0;\",\n \" int l = 1, r = len - 1;\",\n \" while (l <= r) {\",\n \" int mid = l + r >> 1;\",\n \" Value F1 = a.getHash(1, mid);\",\n \" Value F2 = b.getHash(1, mid);\",\n \" if (F1 == F2) {\",\n \" max_same = mid;\",\n \" l = mid + 1;\",\n \" } else r = mid - 1;\",\n \" }\",\n \" if (max_same == len) return a.len < b.len;\",\n \" return a.S[max_same + 1] < b.S[max_same + 1];\",\n \" }\",\n \"\",\n \"}\",\n \"\",\n \"using namespace HASHING;\"\n ],\n \"description\": \"HASHING\"\n },\n \"GRADER\": {\n \"scope\": \"cpp\",\n \"prefix\": \"GRADER\",\n \"body\": [\n \"#include <bits/stdc++.h>\",\n \"\",\n \"using namespace std;\",\n \"\",\n \"struct Benchmark {\",\n \" unsigned long long last;\",\n \"\",\n \" static unsigned long long now() {\",\n \" return chrono::steady_clock::now().time_since_epoch().count();\",\n \" }\",\n \"\",\n \" Benchmark(): last(now()) {}\",\n \"\",\n \" pair <string, long double> section(const string &name) {\",\n \" unsigned long long current = now();\",\n \" long double elapsed = (long double) (current - last) / 1e9;\",\n \" stringstream ss;\",\n \" ss << fixed << setprecision(9) << name << \\\": \\\" << elapsed << \\\"s.\\\";\",\n \" last = current;\",\n \" return {ss.str(), elapsed};\",\n \" }\",\n \"};\",\n \"\",\n \"const string NAME = \\\"${file_name}\\\";\",\n \"const int NUM_TEST = 1000;\",\n \"const long double TIME_LIMIT = 10;\",\n \"\",\n \"#ifdef _WIN32\",\n \"const string EXECUTABLE_SUFFIX = \\\".exe\\\";\",\n \"const string CLEAR_COMMAND = \\\"cls\\\";\",\n \"#else\",\n \"const string EXECUTABLE_SUFFIX = \\\"\\\";\",\n \"const string CLEAR_COMMAND = \\\"clear\\\";\",\n \"#endif\",\n \"\",\n \"int run_command(const string &command) {\",\n \" return system(command.c_str());\",\n \"}\",\n \"\",\n \"void check_status(int status, const string &where) {\",\n \" if (!status) return;\",\n \" cout << where << \\\" -> program exited abnormally\\\\n\\\";\",\n \" exit(0);\",\n \"}\",\n \"\",\n \"int main() {\",\n \" for (int iTest = 1; iTest <= NUM_TEST; ++iTest) {\",\n \" cout << \\\"Running on test \\\" << iTest;\",\n \" check_status(run_command(\\\"./gen\\\" + EXECUTABLE_SUFFIX), \\\"\\\\t./generator\\\");\",\n \"\",\n \" Benchmark bm;\",\n \" check_status(run_command(\\\"./\\\" + NAME + EXECUTABLE_SUFFIX), \\\"\\\\t./\\\" + NAME);\",\n \" auto bms = bm.section(\\\"\\\\ttime\\\");\",\n \" // cout << bms.first;\",\n \" cout << '\\\\n';\",\n \"\",\n \" if (bms.second > TIME_LIMIT) {\",\n \" cout << \\\"Time limit exceeded on test \\\" << iTest << '\\\\n';\",\n \" return 0;\",\n \" }\",\n \"\",\n \" check_status(run_command(\\\"./\\\" + NAME + \\\"_bf\\\" + EXECUTABLE_SUFFIX), \\\"\\\\t./\\\" + NAME + \\\"_bf\\\");\",\n \" if (run_command(\\\"diff -w \\\" + NAME + \\\".out \\\" + NAME + \\\".ans\\\")) {\",\n \" cout << \\\"Wrong answer on test \\\" << iTest << '\\\\n';\",\n \" return 0;\",\n \" }\",\n \" if (iTest % 30 == 0) run_command(CLEAR_COMMAND);\",\n \" }\",\n \" cout << \\\"Accepted!\\\\n\\\";\",\n \" return 0;\",\n \"}\"\n ],\n \"description\": \"GRADER\"\n },\n \"GEOMETRY\": {\n \"scope\": \"cpp\",\n \"prefix\": \"GEOMETRY\",\n \"body\": [\n \"struct Point {\",\n \" long long x, y;\",\n \" Point(long long x = 0, long long y = 0): x(x), y(y) {}\",\n \" friend istream & operator >> (istream &in, Point &u) { return in >> u.x >> u.y; }\",\n \" friend ostream & operator << (ostream &out, const Point &u) { return out << '(' << u.x << \\\", \\\" << u.y << ')'; }\",\n \" bool operator == (const Point &other) const { return x == other.x && y == other.y; }\",\n \" bool operator < (const Point &other) const { return make_pair(x, y) < make_pair(other.x, other.y); }\",\n \" Point & operator += (const Point &other) {x += other.x; y += other.y; return *this; }\",\n \" Point & operator -= (const Point &other) { x -= other.x; y -= other.y; return *this; }\",\n \" Point & operator *= (long long v) { x *= v; y *= v; return *this; }\",\n \" Point & operator /= (long long v) { x /= v; y /= v; return *this; }\",\n \" Point operator + (const Point &other) const { return Point(*this) += other; }\",\n \" Point operator - (const Point &other) const { return Point(*this) -= other; }\",\n \" Point operator * (long long v) const { return Point(*this) *= v; }\",\n \" Point operator / (long long v) const { return Point(*this) /= v; }\",\n \" long long dot(const Point &other) const { return x * other.x + y * other.y; }\",\n \" long long cross(const Point &other) const { return x * other.y - y * other.x; }\",\n \" long long norm(void) const { return x * x + y * y; }\",\n \" double length(void) const { return sqrtl(norm()); }\",\n \" double angle(const Point &other) const { return acos(dot(other) / length() / other.length()); }\",\n \" long long cross(const Point &a, const Point &b) const { return (a - *this).cross(b - *this); }\",\n \"};\",\n \"int sgn(long long val) { return val < 0 ? -1 : !!val; }\",\n \"int ccw(const Point &a, const Point &b, const Point &c) { return sgn(a.cross(b, c)); }\",\n \"double linePointDist(const Point &a, const Point &b, const Point &c, bool isSegment) {\",\n \" double dist = abs((b - a).cross(c - a)) / (a - b).length();\",\n \" if (isSegment) {\",\n \" if ((a - b).dot(c - b) < 0) return (b - c).length();\",\n \" if ((b - a).dot(c - a) < 0) return (a - c).length();\",\n \" }\",\n \" return dist;\",\n \"}\",\n \"bool inter1(long long a, long long b, long long c, long long d) {\",\n \" if (a > b) swap(a, b);\",\n \" if (c > d) swap(c, d);\",\n \" return max(a, c) <= min(b, d);\",\n \"}\",\n \"bool check_inter(const Point &a, const Point &b, const Point &p) {\",\n \" return !a.cross(b, p) && inter1(a.x, b.x, p.x, p.x) && inter1(a.y, b.y, p.y, p.y);\",\n \"}\",\n \"bool check_inter(const Point &a, const Point &b, const Point &c, const Point &d) {\",\n \" if (!c.cross(a, d) && !c.cross(b, d)) \",\n \" return inter1(a.x, b.x, c.x, d.x) && inter1(a.y, b.y, c.y, d.y);\",\n \" return ccw(a, b, c) != ccw(a, b, d) && ccw(c, d, a) != ccw(c, d, b);\",\n \"}\",\n \"struct Line {\",\n \" // ax + by = c\",\n \" long long a, b, c;\",\n \" Line(long long a = 0, long long b = 0, long long c = 0): a(a), b(b), c(c) {}\",\n \" Line(const Point &m, const Point &n) {\",\n \" a = m.y - n.y;\",\n \" b = n.x - m.x;\",\n \" c = a * m.x + b * m.y;\",\n \" }\",\n \" bool intersect(const Line &other, Point &res) const {\",\n \" long long x = a * other.b - b * other.a;\",\n \" if (!x) return false;\",\n \" res.x = (other.b * c - b * other.c) / x;\",\n \" res.y = (a * other.c - c * other.a) / x;\",\n \" return true;\",\n \" }\",\n \" bool parallel(const Line &other) const {\",\n \" return a * other.b - b * other.a == 0;\",\n \" }\",\n \" bool equivalent(const Line &other) const {\",\n \" return a * other.b - b * other.a == 0\",\n \" && a * other.c - c * other.a == 0\",\n \" && b * other.c - c * other.b == 0;\",\n \" }\",\n \"};\",\n \"void convex_hull(vector <Point> &p) {\",\n \" if (p.size() <= 1) return;\",\n \" sort(p.begin(), p.end());\",\n \" Point p1 = p[0], p2 = p.back();\",\n \" vector <Point> up {p1}, down {p1};\",\n \" for (int i = 1; i < (int) p.size(); ++i) {\",\n \" int c = ccw(p1, p[i], p2);\",\n \" if (i == (int) p.size() - 1 || c < 0) {\",\n \" while (up.size() > 1 && ccw(up.end()[-2], up.back(), p[i]) >= 0) up.pop_back();\",\n \" up.push_back(p[i]);\",\n \" }\",\n \" if (i == (int) p.size() - 1 || c > 0) {\",\n \" while (down.size() > 1 && ccw(down.end()[-2], down.back(), p[i]) <= 0) down.pop_back();\",\n \" down.push_back(p[i]);\",\n \" }\",\n \" }\",\n \" p = move(up);\",\n \" p.insert(p.end(), down.rbegin() + 1, down.rend() - 1);\",\n \" if (p.size() == 2 && p[0] == p[1]) p.pop_back();\",\n \"}\",\n \"long long area_x2(const vector <Point> &p) {\",\n \" long long res = 0;\",\n \" for (int i = 0; i < (int) p.size(); ++i) res += p[i].cross(p[i == (int) p.size() - 1 ? 0 : i + 1]);\",\n \" return abs(res);\",\n \"}\",\n \"int n;\",\n \"vector <Point> seq;\",\n \"Point translation;\",\n \"void prepareConvexPolygon(vector <Point> &p) {\",\n \" if (ccw(p[0], p[1], p[2]) < 0) reverse(p.begin(), p.end());\",\n \" n = p.size();\",\n \" int pos = 0;\",\n \" for (int i = 1; i < n; ++i) if (p[i] < p[pos]) pos = i;\",\n \" rotate(p.begin(), p.begin() + pos, p.end());\",\n \" --n;\",\n \" seq.resize(n);\",\n \" translation = p[0];\",\n \" for (int i = 0; i < n; ++i) seq[i] = p[i + 1] - translation;\",\n \"}\",\n \"bool pointInTriangle(const Point &a, const Point &b, const Point &c, const Point &p) {\",\n \" return abs(a.cross(b, c)) == abs(p.cross(a, b)) + abs(p.cross(b, c)) + abs(p.cross(c, a));\",\n \"}\",\n \"bool pointInConvexPolygon(Point p) {\",\n \" p -= translation;\",\n \" if (seq[0].cross(p) < 0) return false;\",\n \" if (seq[n - 1].cross(p) > 0) return false;\",\n \" if (!seq[0].cross(p)) return seq[0].norm() >= p.norm();\",\n \" int l = 0, r = n - 2;\",\n \" while (l <= r) {\",\n \" int m = (l + r) >> 1;\",\n \" if (seq[m].cross(p) > 0) l = m + 1;\",\n \" else r = m - 1;\",\n \" }\",\n \" return pointInTriangle(seq[r], seq[r + 1], Point(0, 0), p);\",\n \"}\"\n ],\n \"description\": \"GEOMETRY\"\n },\n \"GENERATOR\": {\n \"scope\": \"cpp\",\n \"prefix\": \"GENERATOR\",\n \"body\": [\n \"#include \\\"grader/generator_pch.h\\\"\",\n \"\",\n \"using namespace std;\",\n \"\",\n \"int main(int argc, char **argv) {\",\n \" ios_base::sync_with_stdio(false);\",\n \" cin.tie(nullptr);\",\n \"\",\n \" string program_name = \\\"generator\\\";\",\n \" string seed = to_string(chrono::steady_clock::now().time_since_epoch().count());\",\n \" char *default_argv[] = {program_name.data(), seed.data()};\",\n \" if (argc == 1) {\",\n \" registerGen(2, default_argv, 1);\",\n \" } else {\",\n \" registerGen(argc, argv, 1);\",\n \" }\",\n \"\",\n \" freopen(\\\"${file_name}.inp\\\", \\\"w\\\", stdout);\",\n \"\",\n \" return 0;\",\n \"}\"\n ],\n \"description\": \"GENERATOR\"\n },\n \"GAUSSIAN_ELIMINATION\": {\n \"scope\": \"cpp\",\n \"prefix\": [\n \"GAUSSIAN_ELIMINATION\",\n \"GAUSS_ELIMINATION\"\n ],\n \"body\": [\n \"int GaussianElimination(vector <vector <double>> a, vector <double> &res, double eps = 1e-9) {\",\n \" int n = a.size();\",\n \" int m = (int) a[0].size() - 1;\",\n \" vector <int> where(m, -1);\",\n \" for (int i = 0, j = 0; i < n && j < m; ++j) {\",\n \" int pos = i;\",\n \" for (int k = i + 1; k < n; ++k) if (abs(a[k][j]) > abs(a[pos][j])) pos = k;\",\n \" if (abs(a[pos][j]) < eps) continue;\",\n \" for (int k = j; k <= m; ++k) swap(a[i][k], a[pos][k]);\",\n \" where[j] = i;\",\n \" for (int k = 0; k < n; ++k) if (k != i) {\",\n \" double c = a[k][j] / a[i][j];\",\n \" for (int l = j; l <= m; ++l) a[k][l] -= a[i][l] * c;\",\n \" }\",\n \" ++i;\",\n \" }\",\n \" res.assign(m, 0);\",\n \" for (int i = 0; i < m; ++i) if (where[i] != -1) res[i] = a[where[i]][m] / a[where[i]][i];\",\n \" for (int i = 0; i < n; ++i) {\",\n \" double sum = 0;\",\n \" for (int j = 0; j < m; ++j) sum += res[j] * a[i][j];\",\n \" if (abs(sum - a[i][m]) > eps) return 0;\",\n \" }\",\n \" for (int i = 0; i < m; ++i) if (where[i] == -1) return 2; // INF\",\n \" return 1;\",\n \"}\"\n ],\n \"description\": \"GAUSSIAN_ELIMINATION\"\n },\n \"FENWICK_TREE\": {\n \"scope\": \"cpp\",\n \"prefix\": \"FENWICK_TREE\",\n \"body\": [\n \"template <class T> struct FenwickTree {\",\n \" int n; vector <T> bit;\",\n \" FenwickTree() = default;\",\n \" FenwickTree(int _n): n(_n), bit(n + 1, T{}) {}\",\n \" FenwickTree(const vector <T> &a): n(a.size()), bit(a.size() + 1, T{}) {\",\n \" for (int i = 1; i <= n; ++i) {\",\n \" bit[i] += a[i - 1];\",\n \" if (i + (i & -i) <= n) bit[i + (i & -i)] += bit[i];\",\n \" }\",\n \" }\",\n \" void reset(void) { fill(bit.begin(), bit.end(), T{}); }\",\n \" void update(int i, T val) { for (i = max(1, i + 1); i <= n; i += i & -i) bit[i] += val; }\",\n \" T get(int i) {\",\n \" if (i < 0) return T{};\",\n \" T res = T{};\",\n \" for (i = min(i + 1, n); i > 0; i &= i - 1) res += bit[i];\",\n \" return res;\",\n \" }\",\n \" T get(int l, int r) { return get(r) - get(l - 1); }\",\n \" int upper_bound(T val) {\",\n \" int res = 0;\",\n \" for (int i = __lg(n); i >= 0; --i)\",\n \" if ((res | (1 << i)) <= n && val >= bit[res | (1 << i)]) res |= (1 << i), val -= bit[res];\",\n \" return res;\",\n \" }\",\n \" int lower_bound(T val) {\",\n \" int res = 0;\",\n \" for (int i = __lg(n); i >= 0; --i)\",\n \" if ((res | (1 << i)) <= n && val > bit[res | (1 << i)]) res |= (1 << i), val -= bit[res];\",\n \" return res;\",\n \" }\",\n \"};\"\n ],\n \"description\": \"FENWICK_TREE\"\n },\n \"FENWICK_TREE_RANGE\": {\n \"scope\": \"cpp\",\n \"prefix\": \"FENWICK_TREE_RANGE\",\n \"body\": [\n \"template<\",\n \" class T, // data type for nodes\",\n \" T (*op) (T, T), // operator to combine 2 nodes\",\n \" T (*e)() // identity element\",\n \" >\",\n \"struct FenwickTree_R {\",\n \" int n; vector <T> bit1, bit2, a;\",\n \" FenwickTree_R() = default;\",\n \" FenwickTree_R(int _n): n(_n), bit1(n + 1, e()), bit2(n + 1, e()), a(n + 1, e()) {}\",\n \" void reset(void) {\",\n \" fill(bit1.begin(), bit1.end(), e());\",\n \" fill(bit2.begin(), bit2.end(), e());\",\n \" fill(a.begin(), a.end(), e());\",\n \" }\",\n \"#define lowbit(x) ((x) & -(x))\",\n \" FenwickTree_R(const vector <T> &v): n(v.size()), bit1(n + 1, e()), bit2(n + 1, e()), a(n + 1, e()) {\",\n \" for (int i = 1; i <= n; ++i) {\",\n \" a[i] = v[i - 1];\",\n \" bit1[i] = op(bit1[i], a[i]);\",\n \" if (i + lowbit(i) <= n) bit1[i + lowbit(i)] = op(bit1[i + lowbit(i)], bit1[i]);\",\n \" }\",\n \" for (int i = n; i > 0; --i) {\",\n \" bit2[i] = op(a[i], bit2[i]);\",\n \" if (i - lowbit(i) > 0) bit2[i - lowbit(i)] = op(bit2[i], bit2[i - lowbit(i)]);\",\n \" }\",\n \" }\",\n \" void set(int p, T val) {\",\n \" assert(0 <= p && p < n);\",\n \" ++p;\",\n \" a[p] = val;\",\n \" T cur = val;\",\n \" for (int i = p, l = p - 1, r = p + 1; i <= n; i += lowbit(i)) {\",\n \" for (; r < i; r += lowbit(r)) cur = op(cur, bit2[r]);\",\n \" for (; l > i - lowbit(i); l -= lowbit(l)) cur = op(bit1[l], cur);\",\n \" bit1[i] = i == p ? cur : op(cur, a[r]);\",\n \" }\",\n \" cur = val;\",\n \" for (int i = p, l = p - 1, r = p + 1; i > 0; i -= lowbit(i)) {\",\n \" for (; r < min(n + 1, i + lowbit(i)); r += lowbit(r)) cur = op(cur, bit2[r]);\",\n \" for (; l > i; l -= lowbit(l)) cur = op(bit1[l], cur);\",\n \" bit2[i] = i == p ? cur : op(a[l], cur);\",\n \" }\",\n \" }\",\n \" void get(int p) const { return a[p]; }\",\n \" // Get product in range [l, r-1]\",\n \" // For empty segment (l == r) -> return e()\",\n \" T prod(int l, int r) const {\",\n \" assert(0 <= l && l <= r && r <= n);\",\n \" if (l == r) return e();\",\n \" ++l;\",\n \" T lft = e(), rgt = e();\",\n \" int i;\",\n \" for (i = l; i + lowbit(i) <= r; i += lowbit(i)) lft = op(lft, bit2[i]);\",\n \" lft = op(lft, a[i]);\",\n \" for (i = r; i - lowbit(i) >= l; i -= lowbit(i)) rgt = op(bit1[i], rgt);\",\n \" return op(lft, rgt);\",\n \" }\",\n \" T all_prod() const {\",\n \" T res = e();\",\n \" for (int i = n; i > 0; i -= lowbit(i)) res = op(bit1[i], res);\",\n \" return res;\",\n \" }\",\n \"};\",\n \"// FenwickTree_R examples {{{\",\n \"// Examples: Commonly used FenwickTree_R ops: max / min\",\n \"struct MaxFenwickOp {\",\n \" static int op(int x, int y) { return max(x, y); }\",\n \" static int e() { return -1e9; }\",\n \"};\",\n \"struct MinFenwickOP {\",\n \" static int op(int x, int y) { return min(x, y); }\",\n \" static int e() { return 1e9; }\",\n \"};\",\n \"using MaxFenwick = FenwickTree_R <int, MaxFenwickOp::op, MaxFenwickOp::e>;\",\n \"using MinFenwick = FenwickTree_R <int, MinFenwickOP::op, MinFenwickOP::e>;\",\n \"// }}}\"\n ],\n \"description\": \"FENWICK_TREE_RANGE\"\n },\n \"FASTIO_KACTL\": {\n \"scope\": \"cpp\",\n \"prefix\": \"FASTIO_KACTL\",\n \"body\": [\n \"inline char gc() { // like getchar()\",\n \"\\tstatic char buf[1 << 16];\",\n \"\\tstatic size_t bc, be;\",\n \"\\tif (bc >= be) {\",\n \"\\t\\tbuf[0] = 0, bc = 0;\",\n \"\\t\\tbe = fread(buf, 1, sizeof(buf), stdin);\",\n \"\\t}\",\n \"\\treturn buf[bc++]; // returns 0 on EOF\",\n \"}\",\n \"\",\n \"int readInt() {\",\n \"\\tint a, c;\",\n \"\\twhile ((a = gc()) < 40);\",\n \"\\tif (a == '-') return -readInt();\",\n \"\\twhile ((c = gc()) >= 48) a = a * 10 + c - 480;\",\n \"\\treturn a - 48;\",\n \"}\"\n ],\n \"description\": \"FASTIO_KACTL\"\n },\n \"EDMONDS_KARP\": {\n \"scope\": \"cpp\",\n \"prefix\": \"EDMONDS_KARP\",\n \"body\": [\n \"struct MaxFlow {\",\n \"\",\n \" static const long long INF = 1e18;\",\n \"\",\n \" struct Edge {\",\n \" int from, to;\",\n \" long long capa, flow;\",\n \" Edge(int from = 0, int to = 0, long long capa = 0):\",\n \" from(from), to(to), capa(capa), flow(0) {}\",\n \" long long residual(void) const { return capa - flow; }\",\n \" bool saturating(void) { return !residual(); }\",\n \" };\",\n \"\",\n \" vector <Edge> edges;\",\n \" vector <vector <int>> adj;\",\n \" vector <int> dist, par;\",\n \"\",\n \" MaxFlow(int n) {\",\n \" adj.assign(n + 1, vector<int> ());\",\n \" dist.resize(n + 1);\",\n \" par.resize(n + 1);\",\n \" }\",\n \"\",\n \" void addEdge(int u, int v, long long c) {\",\n \" adj[u].push_back(edges.size());\",\n \" edges.push_back(Edge(u, v, c));\",\n \" adj[v].push_back(edges.size());\",\n \" edges.push_back(Edge(v, u, 0));\",\n \" }\",\n \"\",\n \" bool findPath(int s, int t) {\",\n \" fill(dist.begin(), dist.end(), -1);\",\n \" fill(par.begin(), par.end(), -1);\",\n \" queue <int> q;\",\n \" dist[s] = 0; q.push(s);\",\n \" while (!q.empty()) {\",\n \" int u = q.front(); q.pop();\",\n \" for (int &id: adj[u]) if (edges[id].residual() > 0) {\",\n \" int v = edges[id].to;\",\n \" if (dist[v] == -1) {\",\n \" dist[v] = dist[u] + 1;\",\n \" par[v] = id;\",\n \" q.push(v);\",\n \" }\",\n \" }\",\n \" }\",\n \" return dist[t] != -1;\",\n \" }\",\n \"\",\n \" long long getFlow(int s, int t) {\",\n \" for (Edge &e: edges) e.flow = 0;\",\n \" long long totFlow = 0;\",\n \" while (findPath(s, t)) {\",\n \" long long delta = INF;\",\n \" for (int u = t; u != s; u = edges[par[u]].from)\",\n \" delta = min(delta, edges[par[u]].residual());\",\n \" totFlow += delta;\",\n \" for (int u = t; u != s; u = edges[par[u]].from) {\",\n \" edges[par[u]].flow += delta;\",\n \" edges[par[u] ^ 1].flow -= delta;\",\n \" }\",\n \" }\",\n \" return totFlow;\",\n \" }\",\n \"\",\n \" bool saturating(int s, int t) {\",\n \" getFlow(s, t);\",\n \" for (int &id: adj[s]) if (edges[id].from == s && !edges[id].saturating()) return false;\",\n \" return true;\",\n \" }\",\n \"\",\n \"};\"\n ],\n \"description\": \"EDMONDS_KARP\"\n },\n \"DISJOINT_SPARSE_TABLE\": {\n \"scope\": \"cpp\",\n \"prefix\": \"DISJOINT_SPARSE_TABLE\",\n \"body\": [\n \"template <class T, T (*op) (T, T)> struct DisjointSparseTable {\",\n \" int n;\",\n \" vector <vector <T>> st;\",\n \" DisjointSparseTable() {}\",\n \" DisjointSparseTable(const vector <T> &a): n(a.size()) {\",\n \" st.push_back(a);\",\n \" for (int p = 1; 1 << p < n; p++) {\",\n \" st.emplace_back(n);\",\n \" for (int mid = 1 << p; mid < n; mid += 1 << (p + 1)) {\",\n \" st[p][mid - 1] = a[mid - 1];\",\n \" for (int j = mid - 2; j >= mid - (1 << p); --j) st[p][j] = op(a[j], st[p][j + 1]);\",\n \" st[p][mid] = a[mid];\",\n \" for (int j = mid + 1; j < min(n, mid + (1 << p)); ++j) st[p][j] = op(st[p][j - 1], a[j]);\",\n \" }\",\n \" }\",\n \" }\",\n \" T get(int l, int r) const {\",\n \" assert(0 <= l && l < r && r <= n);\",\n \" if (r - l == 1) return st[0][l];\",\n \" int p = __lg(l ^ (r - 1));\",\n \" return op(st[p][l], st[p][r - 1]);\",\n \" }\",\n \"};\"\n ],\n \"description\": \"DISJOINT_SPARSE_TABLE\"\n },\n \"DISJOINT_SET_UNION\": {\n \"scope\": \"cpp\",\n \"prefix\": \"DISJOINT_SET_UNION\",\n \"body\": [\n \"struct DisjointSet {\",\n \" vector <int> par;\",\n \" DisjointSet(int n = 0): par(n, -1) {}\",\n \" void reset(void) { fill(par.begin(), par.end(), -1); }\",\n \" void resize(int n) { par.assign(n, -1); }\",\n \" bool connected(int u, int v) { return find(u) == find(v); }\",\n \" bool isRoot(int u) { return par[u] < 0; }\",\n \" int size(int u) { return -par[find(u)]; }\",\n \" int find(int u) { return par[u] < 0 ? u : par[u] = find(par[u]); }\",\n \" bool join(int u, int v) {\",\n \" if ((u = find(u)) == (v = find(v))) return false;\",\n \" if (par[u] > par[v]) swap(u, v);\",\n \" par[u] += par[v]; par[v] = u;\",\n \" return true;\",\n \" }\",\n \"};\",\n \"using DSU = DisjointSet;\"\n ],\n \"description\": \"DISJOINT_SET_UNION\"\n },\n \"CONVEX_HULL_TRICK\": {\n \"scope\": \"cpp\",\n \"prefix\": \"CONVEX_HULL_TRICK\",\n \"body\": [\n \"struct Line {\",\n \" long long a, b;\",\n \" Line(long long a = 0, long long b = numeric_limits<long long>::max() / 4): a(a), b(b) {}\",\n \" long long eval(long long x) { return a * x + b; }\",\n \"};\",\n \"struct ConvexHullTrick {\",\n \" vector <Line> lines; int ptr;\",\n \" ConvexHullTrick(): ptr(0) {}\",\n \" bool bad(Line a, Line b, Line c) { return (long double) (c.b - a.b) / (a.a - c.a) < (long double) (b.b - a.b) / (a.a - b.a); }\",\n \" void addLine(long long a, long long b) {\",\n \" Line l(a, b);\",\n \" while (lines.size() >= 2 && bad(lines.end()[-2], lines.back(), l)) lines.pop_back();\",\n \" lines.push_back(l);\",\n \" }\",\n \" Line getMin(long long x) {\",\n \" if (ptr >= (int) lines.size()) ptr = (int) lines.size() - 1;\",\n \" while (ptr < (int) lines.size() - 1 && lines[ptr].eval(x) > lines[ptr + 1].eval(x)) ++ptr;\",\n \" return lines[ptr];\",\n \" }\",\n \"};\",\n \"using CHT = ConvexHullTrick;\"\n ],\n \"description\": \"CONVEX_HULL_TRICK\"\n },\n \"COMPRESS\": {\n \"scope\": \"cpp\",\n \"prefix\": \"COMPRESS\",\n \"body\": [\n \"template <class InIter, class OutIter> void compress(InIter first, InIter last, OutIter result) { vector <__typeof(*first)> v(first, last); sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); while (first != last) { *result = lower_bound(v.begin(), v.end(), *first) - v.begin(); ++first; ++result; } }\"\n ],\n \"description\": \"COMPRESS\"\n },\n \"BUMP_ALLOCATOR\": {\n \"scope\": \"cpp\",\n \"prefix\": \"BUMP_ALLOCATOR\",\n \"body\": [\n \"static char buf[450 << 20];\",\n \"void* operator new(size_t s) {\",\n \"\\tstatic size_t i = sizeof buf;\",\n \"\\tassert(s < i);\",\n \"\\treturn (void*) &buf[i -= s];\",\n \"}\",\n \"void operator delete(void*) {}\"\n ],\n \"description\": \"BUMP_ALLOCATOR\"\n },\n \"BRIDGE_ARTICULATION\": {\n \"scope\": \"cpp\",\n \"prefix\": \"BRIDGE_ARTICULATION\",\n \"body\": [\n \"template <class E> struct csr {\",\n \" vector <int> st;\",\n \" vector <E> lst;\",\n \" explicit csr(int n, const vector <pair <int, E>> &edges): st(n + 1), lst(edges.size()) {\",\n \" for (auto e: edges) st[e.first + 1]++;\",\n \" for (int i = 1; i <= n; i++) st[i] += st[i - 1];\",\n \" auto cnt = st;\",\n \" for (auto e: edges) lst[cnt[e.first]++] = e.second;\",\n \" }\",\n \"};\",\n \"\",\n \"struct BridgeArticulation {\",\n \" int n, m, tecc_num, bc_num;\",\n \" vector <int> cuts, low, num, tecc_ids;\",\n \" vector <vector <int>> bc_groups;\",\n \" vector <pair <int, int>> bridges;\",\n \" vector <bool> articulation, is_bridge;\",\n \" struct edge {\",\n \" int to, id;\",\n \" edge(int to = -1, int id = -1): to(to), id(id) {}\",\n \" };\",\n \" vector <pair <int, edge>> edges;\",\n \" BridgeArticulation(int _n = 0) : n(_n), m(0) {}\",\n \" void add(int u, int v) {\",\n \" edges.emplace_back(u, edge(v, m));\",\n \" edges.emplace_back(v, edge(u, m++));\",\n \" }\",\n \" void init() {\",\n \" csr <edge> g = csr<edge>(n, edges);\",\n \" int t = 0;\",\n \" articulation.resize(n);\",\n \" is_bridge.resize(m);\",\n \" low.resize(n);\",\n \" num.assign(n, -1);\",\n \" tecc_num = bc_num = 0;\",\n \" vector <bool> used(m);\",\n \" vector <int> tecc_st, bc_st;\",\n \" tecc_ids.resize(n);\",\n \" bc_groups.clear();\",\n \" for (int r = 0; r < n; r++) if (num[r] == -1) {\",\n \" int child = 0;\",\n \" auto dfs = [&] (auto dfs, int u) -> void {\",\n \" tecc_st.push_back(u);\",\n \" bc_st.push_back(u);\",\n \" num[u] = t++;\",\n \" low[u] = n;\",\n \" for (int i = g.st[u]; i < g.st[u + 1]; i++) {\",\n \" int id = g.lst[i].id;\",\n \" if (used[id]) continue;\",\n \" used[id] = true;\",\n \" int v = g.lst[i].to;\",\n \" if (num[v] == -1) {\",\n \" if (u == r) ++child;\",\n \" dfs(dfs, v);\",\n \" if (low[v] >= num[u]) {\",\n \" articulation[u] = true;\",\n \" int w;\",\n \" bc_groups.push_back({u});\",\n \" do {\",\n \" w = bc_st.back(); bc_st.pop_back();\",\n \" bc_groups.back().push_back(w);\",\n \" } while (w != v);\",\n \" ++bc_num;\",\n \" }\",\n \" if (low[v] > num[u]) {\",\n \" is_bridge[id] = true;\",\n \" bridges.emplace_back(u, v);\",\n \" }\",\n \" low[u] = min(low[u], low[v]);\",\n \" } else low[u] = min(low[u], num[v]);\",\n \" }\",\n \" if (low[u] >= num[u]) {\",\n \" int v;\",\n \" do {\",\n \" v = tecc_st.back(); tecc_st.pop_back();\",\n \" tecc_ids[v] = tecc_num;\",\n \" } while (v != u);\",\n \" ++tecc_num;\",\n \" }\",\n \" };\",\n \" dfs(dfs, r);\",\n \" articulation[r] = child > 1;\",\n \" if (!child) {\",\n \" bc_groups.push_back({r});\",\n \" ++bc_num;\",\n \" }\",\n \" }\",\n \" for (int i = 0; i < n; ++i) if (articulation[i]) cuts.push_back(i);\",\n \" }\",\n \" vector <vector <int>> tecc() {\",\n \" vector <int> cnt(tecc_num);\",\n \" for (int x: tecc_ids) cnt[x]++;\",\n \" vector <vector <int>> groups(tecc_num);\",\n \" for (int i = 0; i < tecc_num; i++) groups[i].reserve(cnt[i]);\",\n \" for (int i = 0; i < n; i++) groups[tecc_ids[i]].push_back(i);\",\n \" return groups;\",\n \" }\",\n \"};\"\n ],\n \"description\": \"BRIDGE_ARTICULATION\"\n },\n \"BITSET_TRICK\": {\n \"scope\": \"cpp\",\n \"prefix\": \"BITSET_TRICK\",\n \"body\": [\n \"template <size_t bitset_size> void solve(int n) {\",\n \"\",\n \"}\",\n \"\",\n \"template <size_t bit = 0> void try_solve(int n) {\",\n \" if constexpr(bit < 30) {\",\n \" if (n <= (1u << bit)) solve<(1u << bit)>(n);\",\n \" else try_solve<bit + 1>(n);\",\n \" }\",\n \"}\"\n ],\n \"description\": \"BITSET_TRICK\"\n },\n \"BIGINT\": {\n \"scope\": \"cpp\",\n \"prefix\": \"BIGINT\",\n \"body\": [\n \"const int BASE_DIGITS = 9;\",\n \"const int BASE = 1000000000;\",\n \"struct BigInt {\",\n \" int sign;\",\n \" vector <int> a;\",\n \" BigInt() : sign(1) {}\",\n \" BigInt(long long v) { *this = v; }\",\n \" BigInt & operator = (long long v) {\",\n \" sign = 1; if (v < 0) sign = -1, v = -v; a.clear();\",\n \" for (; v > 0; v = v / BASE) a.push_back(v % BASE); \",\n \" return *this;\",\n \" }\",\n \" BigInt(const string& s) { read(s); }\",\n \" void read(const string &s) {\",\n \" sign = 1; a.clear(); int pos = 0;\",\n \" while (pos < (int) s.size() && (s[pos] == '-' || s[pos] == '+')) {\",\n \" if (s[pos] == '-') sign = -sign;\",\n \" ++pos;\",\n \" }\",\n \" for (int i = (int) s.size() - 1; i >= pos; i -= BASE_DIGITS) {\",\n \" int x = 0;\",\n \" for (int j = max(pos, i - BASE_DIGITS + 1); j <= i; j++) x = x * 10 + s[j] - '0';\",\n \" a.push_back(x);\",\n \" }\",\n \" trim();\",\n \" }\",\n \" friend istream & operator >> (istream &stream, BigInt &v) { string s; stream >> s; v.read(s); return stream; }\",\n \" friend ostream & operator << (ostream &stream, const BigInt &v) {\",\n \" if (v.sign == -1 && !v.isZero()) stream << '-';\",\n \" stream << (v.a.empty() ? 0 : v.a.back());\",\n \" for (int i = (int) v.a.size() - 2; i >= 0; --i) stream << setw(BASE_DIGITS) << setfill('0') << v.a[i];\",\n \" return stream;\",\n \" }\",\n \" bool operator < (const BigInt &v) const {\",\n \" if (sign != v.sign) return sign < v.sign;\",\n \" if (a.size() != v.a.size()) return a.size() * sign < v.a.size() * v.sign;\",\n \" for (int i = ((int) a.size()) - 1; i >= 0; i--) if (a[i] != v.a[i]) return a[i] * sign < v.a[i] * sign;\",\n \" return false;\",\n \" }\",\n \" bool operator>(const BigInt &v) const { return v < *this; }\",\n \" bool operator<=(const BigInt &v) const { return !(v < *this); }\",\n \" bool operator>=(const BigInt &v) const { return !(*this < v); }\",\n \" bool operator==(const BigInt &v) const { return !(*this < v) && !(v < *this); }\",\n \" bool operator!=(const BigInt &v) const { return *this < v || v < *this; }\",\n \" friend int __compare_abs(const BigInt &x, const BigInt &y) {\",\n \" if (x.a.size() != y.a.size()) return x.a.size() < y.a.size() ? -1 : 1;\",\n \" for (int i = ((int) x.a.size()) - 1; i >= 0; --i) if (x.a[i] != y.a[i]) return x.a[i] < y.a[i] ? -1 : 1;\",\n \" return 0;\",\n \" }\",\n \" BigInt operator - () const { BigInt res = *this; if (isZero()) return res; res.sign = -sign; return res; }\",\n \" void __internal_add(const BigInt &v) {\",\n \" if (a.size() < v.a.size()) a.resize(v.a.size(), 0);\",\n \" for (int i = 0, carry = 0; i < (int) max(a.size(), v.a.size()) || carry; ++i) {\",\n \" if (i == (int) a.size()) a.push_back(0);\",\n \" a[i] += carry + (i < (int) v.a.size() ? v.a[i] : 0);\",\n \" carry = a[i] >= BASE; if (carry) a[i] -= BASE;\",\n \" }\",\n \" }\",\n \" void __internal_sub(const BigInt &v) {\",\n \" for (int i = 0, carry = 0; i < (int) v.a.size() || carry; ++i) {\",\n \" a[i] -= carry + (i < (int) v.a.size() ? v.a[i] : 0);\",\n \" carry = a[i] < 0; if (carry) a[i] += BASE;\",\n \" }\",\n \" this->trim();\",\n \" }\",\n \" BigInt operator += (const BigInt &v) {\",\n \" if (sign == v.sign) __internal_add(v);\",\n \" else {\",\n \" if (__compare_abs(*this, v) >= 0) __internal_sub(v); \",\n \" else { BigInt vv = v; swap(*this, vv); __internal_sub(vv); }\",\n \" }\",\n \" return *this;\",\n \" }\",\n \" BigInt operator -= (const BigInt &v) {\",\n \" if (sign == v.sign) {\",\n \" if (__compare_abs(*this, v) >= 0) __internal_sub(v);\",\n \" else { BigInt vv = v; swap(*this, vv); __internal_sub(vv); this->sign = -this->sign; }\",\n \" } else __internal_add(v);\",\n \" return *this;\",\n \" }\",\n \" template <typename L, typename R> typename enable_if <is_convertible<L, BigInt>::value && is_convertible<R, BigInt>::value && is_lvalue_reference < R&& >::value, BigInt>::type friend operator + (L &&l, R &&r) {\",\n \" BigInt result(forward<L>(l)); result += r; return result;\",\n \" }\",\n \" template <typename L, typename R> typename enable_if <is_convertible<L, BigInt>::value && is_convertible<R, BigInt>::value && is_rvalue_reference < R&& >::value, BigInt>::type friend operator + (L &&l, R &&r) {\",\n \" BigInt result(move(r)); result += l; return result;\",\n \" }\",\n \" template <typename L, typename R> typename enable_if <is_convertible<L, BigInt>::value && is_convertible<R, BigInt>::value, BigInt>::type friend operator - (L &&l, R &&r) {\",\n \" BigInt result(forward<L>(l)); result -= r; return result;\",\n \" }\",\n \" friend pair <BigInt, BigInt> divmod(const BigInt &a1, const BigInt &b1) {\",\n \" assert(b1 > 0);\",\n \" long long norm = BASE / (b1.a.back() + 1);\",\n \" BigInt a = a1.abs() * norm, b = b1.abs() * norm, q = 0, r = 0;\",\n \" q.a.resize(a.a.size());\",\n \" for (int i = a.a.size() - 1; i >= 0; i--) {\",\n \" r *= BASE; r += a.a[i];\",\n \" long long s1 = r.a.size() <= b.a.size() ? 0 : r.a[b.a.size()];\",\n \" long long s2 = r.a.size() <= b.a.size() - 1 ? 0 : r.a[b.a.size() - 1];\",\n \" long long d = ((long long) BASE * s1 + s2) / b.a.back();\",\n \" r -= b * d; while (r < 0) r += b, --d; q.a[i] = d;\",\n \" }\",\n \" q.sign = a1.sign * b1.sign; r.sign = a1.sign; q.trim(); r.trim();\",\n \" auto res = make_pair(q, r / norm); if (res.second < 0) res.second += b1; return res;\",\n \" }\",\n \" BigInt operator / (const BigInt &v) const {\",\n \" if (v < 0) return divmod(-*this, -v).first; \",\n \" return divmod(*this, v).first;\",\n \" }\",\n \"\",\n \" BigInt operator % (const BigInt &v) const { return divmod(*this, v).second; }\",\n \" void operator /= (int v) {\",\n \" assert(v > 0);\",\n \" if (llabs(v) >= BASE) { *this /= BigInt(v); return; }\",\n \" if (v < 0) sign = -sign, v = -v;\",\n \" for (int i = (int) a.size() - 1, rem = 0; i >= 0; --i) {\",\n \" long long cur = a[i] + rem * (long long) BASE;\",\n \" a[i] = (int) (cur / v); rem = (int) (cur % v);\",\n \" }\",\n \" trim();\",\n \" }\",\n \" BigInt operator / (int v) const {\",\n \" assert(v > 0);\",\n \" if (llabs(v) >= BASE) return *this / BigInt(v);\",\n \" BigInt res = *this; res /= v; return res;\",\n \" }\",\n \" void operator /= (const BigInt &v) { *this = *this / v; }\",\n \" long long operator % (long long v) const {\",\n \" assert(v > 0); assert(v < BASE);\",\n \" int m = 0; for (int i = (int) a.size() - 1; i >= 0; --i) m = (a[i] + m * (long long) BASE) % v;\",\n \" return m * sign;\",\n \" }\",\n \" void operator *= (int v) {\",\n \" if (llabs(v) >= BASE) { *this *= BigInt(v); return; }\",\n \" if (v < 0) sign = -sign, v = -v;\",\n \" for (int i = 0, carry = 0; i < (int) a.size() || carry; ++i) {\",\n \" if (i == (int) a.size()) a.push_back(0);\",\n \" long long cur = a[i] * (long long) v + carry;\",\n \" carry = (int) (cur / BASE);\",\n \" a[i] = (int) (cur % BASE);\",\n \" }\",\n \" trim();\",\n \" }\",\n \" BigInt operator*(int v) const {\",\n \" if (llabs(v) >= BASE) return *this * BigInt(v);\",\n \" BigInt res = *this; res *= v; return res;\",\n \" }\",\n \" static vector <int> convert_base(const vector<int> &a, int old_digits, int new_digits) {\",\n \" vector<long long> p(max(old_digits, new_digits) + 1); p[0] = 1;\",\n \" for (int i = 1; i < (int) p.size(); i++) p[i] = p[i - 1] * 10;\",\n \" vector <int> res; long long cur = 0; int cur_digits = 0;\",\n \" for (int i = 0; i < (int) a.size(); i++) {\",\n \" cur += a[i] * p[cur_digits]; cur_digits += old_digits;\",\n \" while (cur_digits >= new_digits) {\",\n \" res.push_back((long long)(cur % p[new_digits]));\",\n \" cur /= p[new_digits]; cur_digits -= new_digits;\",\n \" }\",\n \" }\",\n \" res.push_back((int) cur); while (!res.empty() && !res.back()) res.pop_back();\",\n \" return res;\",\n \" }\",\n \" void fft(vector <complex <double>> &x, bool invert) const {\",\n \" int n = (int) x.size();\",\n \" for (int i = 1, j = 0; i < n; ++i) {\",\n \" int bit = n >> 1; for (; j >= bit; bit >>= 1) j -= bit;\",\n \" j += bit; if (i < j) swap(x[i], x[j]);\",\n \" }\",\n \" for (int len = 2; len <= n; len <<= 1) {\",\n \" double ang = 2 * 3.14159265358979323846 / len * (invert ? -1 : 1);\",\n \" complex <double> wlen(cos(ang), sin(ang));\",\n \" for (int i = 0; i < n; i += len) {\",\n \" complex <double> w(1);\",\n \" for (int j = 0; j < len / 2; ++j) {\",\n \" complex<double> u = x[i + j]; complex<double> v = x[i + j + len / 2] * w;\",\n \" x[i + j] = u + v; x[i + j + len / 2] = u - v; w *= wlen;\",\n \" }\",\n \" }\",\n \" }\",\n \" if (invert) for (int i = 0; i < n; ++i) x[i] /= n;\",\n \" }\",\n \" void multiply_fft(const vector <int> &x, const vector <int> &y, vector <int> &res) const {\",\n \" vector <complex <double> > fa(x.begin(), x.end());\",\n \" vector <complex <double> > fb(y.begin(), y.end());\",\n \" int n = 1; while (n < (int) max(x.size(), y.size())) n <<= 1; n <<= 1;\",\n \" fa.resize(n); fb.resize(n); fft(fa, false); fft(fb, false);\",\n \" for (int i = 0; i < n; ++i) fa[i] *= fb[i];\",\n \" fft(fa, true); res.resize(n); long long carry = 0;\",\n \" for (int i = 0; i < n; ++i) {\",\n \" long long t = (long long) (fa[i].real() + 0.5) + carry;\",\n \" carry = t / 1000; res[i] = t % 1000;\",\n \" }\",\n \" }\",\n \" BigInt mul_simple(const BigInt &v) const {\",\n \" BigInt res;\",\n \" res.sign = sign * v.sign;\",\n \" res.a.resize(a.size() + v.a.size());\",\n \" for (int i = 0; i < (int) a.size(); ++i)\",\n \" if (a[i])\",\n \" for (int j = 0, carry = 0; j < (int) v.a.size() || carry; ++j) {\",\n \" long long cur = res.a[i + j] + (long long) a[i] * (j < (int) v.a.size() ? v.a[j] : 0) + carry;\",\n \" carry = (int) (cur / BASE);\",\n \" res.a[i + j] = (int) (cur % BASE);\",\n \" }\",\n \" res.trim();\",\n \" return res;\",\n \" }\",\n \" typedef vector <long long> vll;\",\n \" static vll karatsubaMultiply(const vll &a, const vll &b) {\",\n \" int n = a.size();\",\n \" vll res(n + n);\",\n \" if (n <= 32) {\",\n \" for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) res[i + j] += a[i] * b[j];\",\n \" return res;\",\n \" }\",\n \" int k = n >> 1;\",\n \" vll a1(a.begin(), a.begin() + k), a2(a.begin() + k, a.end()), b1(b.begin(), b.begin() + k), b2(b.begin() + k, b.end());\",\n \" vll a1b1 = karatsubaMultiply(a1, b1), a2b2 = karatsubaMultiply(a2, b2);\",\n \" for (int i = 0; i < k; i++) a2[i] += a1[i];\",\n \" for (int i = 0; i < k; i++) b2[i] += b1[i];\",\n \" vll r = karatsubaMultiply(a2, b2);\",\n \" for (int i = 0; i < (int) a1b1.size(); i++) r[i] -= a1b1[i];\",\n \" for (int i = 0; i < (int) a2b2.size(); i++) r[i] -= a2b2[i];\",\n \" for (int i = 0; i < (int) r.size(); i++) res[i + k] += r[i];\",\n \" for (int i = 0; i < (int) a1b1.size(); i++) res[i] += a1b1[i];\",\n \" for (int i = 0; i < (int) a2b2.size(); i++) res[i + n] += a2b2[i];\",\n \" return res;\",\n \" }\",\n \" BigInt mul_karatsuba(const BigInt &v) const {\",\n \" vector <int> x6 = convert_base(this->a, BASE_DIGITS, 6);\",\n \" vector <int> y6 = convert_base(v.a, BASE_DIGITS, 6);\",\n \" vll x(x6.begin(), x6.end()), y(y6.begin(), y6.end());\",\n \" while (x.size() < y.size()) x.push_back(0);\",\n \" while (y.size() < x.size()) y.push_back(0);\",\n \" while (x.size() & (x.size() - 1)) x.push_back(0), y.push_back(0);\",\n \" vll c = karatsubaMultiply(x, y);\",\n \" BigInt res; res.sign = sign * v.sign; long long carry = 0;\",\n \" for (int i = 0; i < (int) c.size(); i++) {\",\n \" long long cur = c[i] + carry; res.a.push_back((int) (cur % 1000000)); carry = cur / 1000000;\",\n \" }\",\n \" res.a = convert_base(res.a, 6, BASE_DIGITS); res.trim(); return res;\",\n \" }\",\n \" void operator*=(const BigInt &v) { *this = *this * v; }\",\n \" BigInt operator*(const BigInt &v) const {\",\n \" if (a.size() * v.a.size() <= 1000111) return mul_simple(v);\",\n \" if (a.size() > 500111 || v.a.size() > 500111) return mul_fft(v);\",\n \" return mul_karatsuba(v);\",\n \" }\",\n \" BigInt mul_fft(const BigInt& v) const {\",\n \" BigInt res; res.sign = sign * v.sign;\",\n \" multiply_fft(convert_base(a, BASE_DIGITS, 3), convert_base(v.a, BASE_DIGITS, 3), res.a);\",\n \" res.a = convert_base(res.a, 3, BASE_DIGITS); res.trim(); return res;\",\n \" }\",\n \" BigInt abs() const { BigInt res = *this; res.sign *= res.sign; return res; }\",\n \" void trim() { while (!a.empty() && !a.back()) a.pop_back(); if (a.empty()) sign = 1; }\",\n \" bool isZero() const { return a.empty() || (a.size() == 1 && !a[0]); }\",\n \" friend BigInt gcd(const BigInt &x, const BigInt &y) { return y.isZero() ? x : gcd(y, x % y); }\",\n \" friend BigInt lcm(const BigInt &x, const BigInt &y) { return x / gcd(x, y) * y; }\",\n \" friend BigInt sqrt(const BigInt &a1) {\",\n \" BigInt a = a1;\",\n \" while (a.a.empty() || a.a.size() % 2 == 1) a.a.push_back(0);\",\n \" int n = a.a.size();\",\n \" int firstDigit = (int) sqrt((double) a.a[n - 1] * BASE + a.a[n - 2]), norm = BASE / (firstDigit + 1);\",\n \" a *= norm; a *= norm;\",\n \" while (a.a.empty() || a.a.size() % 2 == 1) a.a.push_back(0);\",\n \" BigInt r = (long long) a.a[n - 1] * BASE + a.a[n - 2];\",\n \" firstDigit = (int) sqrt((double) a.a[n - 1] * BASE + a.a[n - 2]);\",\n \" int q = firstDigit; BigInt res;\",\n \" for (int j = n / 2 - 1; j >= 0; j--) {\",\n \" for (; ; --q) {\",\n \" BigInt r1 = (r - (res * 2 * BigInt(BASE) + q) * q) * BigInt(BASE) * BigInt(BASE) + (j > 0 ? (long long) a.a[2 * j - 1] * BASE + a.a[2 * j - 2] : 0);\",\n \" if (r1 >= 0) { r = r1; break; }\",\n \" }\",\n \" res *= BASE; res += q;\",\n \" if (j > 0) {\",\n \" int d1 = res.a.size() + 2 < r.a.size() ? r.a[res.a.size() + 2] : 0;\",\n \" int d2 = res.a.size() + 1 < r.a.size() ? r.a[res.a.size() + 1] : 0;\",\n \" int d3 = res.a.size() < r.a.size() ? r.a[res.a.size()] : 0;\",\n \" q = ((long long) d1 * BASE * BASE + (long long) d2 * BASE + d3) / (firstDigit * 2);\",\n \" }\",\n \" }\",\n \" res.trim(); return res / norm;\",\n \" }\",\n \"};\"\n ],\n \"description\": \"BIGINT\"\n },\n \"BENCHMARK\": {\n \"scope\": \"cpp\",\n \"prefix\": \"BENCHMARK\",\n \"body\": [\n \"struct Benchmark {\",\n \" unsigned long long tim, newtim;\",\n \"\",\n \" unsigned long long get_cur_time(){\",\n \" return chrono::steady_clock::now().time_since_epoch().count();\",\n \" }\",\n \"\",\n \" Benchmark() {\",\n \" tim = newtim = get_cur_time();\",\n \" }\",\n \"\",\n \" string section(string name) {\",\n \" newtim = get_cur_time();\",\n \" stringstream ss;\",\n \" ss << fixed << setprecision(9);\",\n \" ss << name << \\\": \\\" << (long double) (newtim - tim) / 1e9;\",\n \" tim = newtim;\",\n \" string ans;\",\n \" getline(ss, ans);\",\n \" return ans;\",\n \" }\",\n \"};\"\n ],\n \"description\": \"BENCHMARK\"\n },\n \"Z_FUNCTION\": {\n \"scope\": \"cpp\",\n \"prefix\": \"Z_FUNCTION\",\n \"body\": [\n \"template <typename T> vector <int> z_function(int n, const T &s) {\",\n \" if (!n) return {};\",\n \" vector <int> z(n);\",\n \" z[0] = 0;\",\n \" for (int i = 1, j = 0; i < n; i++) {\",\n \" int &k = z[i];\",\n \" k = j + z[j] <= i ? 0 : min(j + z[j] - i, z[i - j]);\",\n \" while (i + k < n && s[k] == s[i + k]) k++;\",\n \" if (j + z[j] < i + z[i]) j = i;\",\n \" }\",\n \" z[0] = n;\",\n \" return z;\",\n \"}\",\n \"template <typename T> vector <int> z_function(const T &s) { return z_function(s.size(), s); }\"\n ],\n \"description\": \"Z_FUNCTION\"\n },\n \"WAVELET_TREE\": {\n \"scope\": \"cpp\",\n \"prefix\": \"WAVELET_TREE\",\n \"body\": [\n \"class WaveletTree {\",\n \"public:\",\n \" WaveletTree(): lo(0), hi(-1), mid(0), n(0) {}\",\n \" template <class RandomIt> WaveletTree(RandomIt first, RandomIt last) {\",\n \" vector <int> v(first, last);\",\n \" build(v.begin(), v.end());\",\n \" }\",\n \" // kth smallest element in [l, r)\",\n \" int kth_smallest(int l, int r, int k) const {\",\n \" assert(0 <= l && l < r && r <= n && 1 <= k && k <= r - l);\",\n \" if (lo == hi) return lo;\",\n \" int inLeft = b[r] - b[l];\",\n \" if (k <= inLeft) return left->kth_smallest(b[l], b[r], k);\",\n \" return right->kth_smallest(l - b[l], r - b[r], k - inLeft);\",\n \" }\",\n \" // kth largest element in [l, r)\",\n \" int kth_largest(int l, int r, int k) const {\",\n \" return kth_smallest(l, r, r - l - k + 1);\",\n \" }\",\n \" // count of numbers in [l, r) less than or equal to k\",\n \" int LTE(int l, int r, int k) const {\",\n \" assert(0 <= l && l <= r && r <= n);\",\n \" if (l == r || k < lo) return 0;\",\n \" if (hi <= k) return r - l;\",\n \" return left->LTE(b[l], b[r], k) + right->LTE(l - b[l], r - b[r], k);\",\n \" }\",\n \" // count of numbers in [l, r) less than k\",\n \" int count_less(int l, int r, int k) const {\",\n \" assert(0 <= l && l <= r && r <= n);\",\n \" if (k <= lo) return 0;\",\n \" return LTE(l, r, k - 1);\",\n \" }\",\n \" // count of numbers in [l, r) equal to k\",\n \" int count(int l, int r, int k) const {\",\n \" assert(0 <= l && l <= r && r <= n);\",\n \" if (l == r || k < lo || k > hi) return 0;\",\n \" if (lo == hi) return r - l;\",\n \" if (k <= mid) return left->count(b[l], b[r], k);\",\n \" return right->count(l - b[l], r - b[r], k);\",\n \" }\",\n \"\",\n \"private:\",\n \" int lo, hi, mid, n;\",\n \" vector <int> b;\",\n \" unique_ptr <WaveletTree> left, right;\",\n \"\",\n \" template <class RandomIt> void build(RandomIt first, RandomIt last) {\",\n \" n = last - first;\",\n \" left = nullptr;\",\n \" right = nullptr;\",\n \" if (!n) { lo = 0; hi = -1; mid = 0; return; }\",\n \" auto x = minmax_element(first, last);\",\n \" lo = *x.first; hi = *x.second;\",\n \" mid = lo + (int) (((long long) hi - lo) / 2);\",\n \" if (lo == hi) return;\",\n \" auto f = [&] (int x) { return x <= mid; };\",\n \" b.reserve(n + 1);\",\n \" b.push_back(0);\",\n \" for (auto it = first; it != last; ++it) b.push_back(b.back() + f(*it));\",\n \" auto pivot = stable_partition(first, last, f);\",\n \" left = make_unique <WaveletTree> ();\",\n \" right = make_unique <WaveletTree> ();\",\n \" left->build(first, pivot);\",\n \" right->build(pivot, last);\",\n \" }\",\n \"};\"\n ],\n \"description\": \"WAVELET_TREE\"\n },\n \"TWO_SAT\": {\n \"scope\": \"cpp\",\n \"prefix\": \"TWO_SAT\",\n \"body\": [\n \"class TwoSat {\",\n \"private:\",\n \"\\tint n;\",\n \"\\tvector <int> order, used, comp;\",\n \"\\tvector <bool> _answer;\",\n \"\\tvector <vector <int>> adj, r_adj;\",\n \"\\tvoid addEdge(int u, int v) {\",\n \"\\t\\tadj[u].push_back(v);\",\n \"\\t\\tr_adj[v].push_back(u);\",\n \"\\t}\",\n \"\\tvoid dfs1(int u) {\",\n \"\\t\\tused[u] = true;\",\n \"\\t\\tfor (int v: adj[u]) if (!used[v]) dfs1(v);\",\n \"\\t\\torder.push_back(u);\",\n \"\\t}\",\n \"\\tvoid dfs2(int u, int cl) {\",\n \"\\t\\tcomp[u] = cl;\",\n \"\\t\\tfor (int v: r_adj[u]) if (!~comp[v]) dfs2(v, cl);\",\n \"\\t}\",\n \"public:\",\n \"\\tTwoSat(int _n = 0) {\",\n \"\\t\\tn = _n;\",\n \"\\t\\tadj.assign(n << 1, vector<int>());\",\n \"\\t\\tr_adj.assign(n << 1, vector<int>());\",\n \"\\t\\tused.resize(n << 1);\",\n \"\\t\\tcomp.resize(n << 1);\",\n \"\\t}\",\n \"\\tvoid addChoiceCondition(int var1, int type1, int var2, int type2) {\",\n \"\\t\\t// condition type: A or B\",\n \"\\t\\tassert(0 <= var1 && var1 < n);\",\n \"\\t\\tassert(0 <= type1 && type1 < 2);\",\n \"\\t\\tassert(0 <= var2 && var2 < n);\",\n \"\\t\\tassert(0 <= type2 && type2 < 2);\",\n \"\\t\\tvar1 = var1 << 1 | type1;\",\n \"\\t\\tvar2 = var2 << 1 | type2;\",\n \"\\t\\taddEdge(var1 ^ 1, var2);\",\n \"\\t\\taddEdge(var2 ^ 1, var1);\",\n \"\\t}\",\n \"\\tvoid addMustFalseCondition(int var) {\",\n \"\\t\\t// Condition type: A = false\",\n \"\\t\\taddChoiceCondition(var, false, var, false);\",\n \"\\t}\",\n \"\\tvoid addMustTrueCondition(int var) {\",\n \"\\t\\t// Condition type: A = true\",\n \"\\t\\taddChoiceCondition(var, true, var, true);\",\n \"\\t}\",\n \"\\tvoid addInferCondition(int var1, int type1, int var2, int type2) {\",\n \"\\t\\t// Condition type: A -> B\",\n \"\\t\\taddChoiceCondition(var1, !type1, var2, type2);\",\n \"\\t}\",\n \"\\tbool satisfiable(void) {\",\n \"\\t\\torder.clear();\",\n \"\\t\\tfill(used.begin(), used.end(), false);\",\n \"\\t\\tfill(comp.begin(), comp.end(), -1);\",\n \"\\t\\tfor (int i = 0; i < n << 1; ++i) if (!used[i]) dfs1(i);\",\n \"\\t\\tfor (int i = n << 1, j = 0; i--; ) {\",\n \"\\t\\t\\tint u = order[i];\",\n \"\\t\\t\\tif (!~comp[u]) dfs2(u, j++);\",\n \"\\t\\t}\",\n \"\\t\\t_answer.resize(n);\",\n \"\\t\\tfor (int i = 0; i < n << 1; i += 2) {\",\n \"\\t\\t\\tif (comp[i] == comp[i + 1]) return false;\",\n \"\\t\\t\\t_answer[i >> 1] = comp[i] < comp[i + 1];\",\n \"\\t\\t}\",\n \"\\t\\treturn true;\",\n \"\\t}\",\n \"\\tvector <bool> answer() { return _answer; }\",\n \"};\"\n ],\n \"description\": \"TWO_SAT\"\n },\n \"SUFFIX_ARRAY\": {\n \"scope\": \"cpp\",\n \"prefix\": \"SUFFIX_ARRAY\",\n \"body\": [\n \"namespace SUFFIX_ARRAY {\",\n \"vector<int> sa_naive(const vector<int>& s) {\",\n \" int n = s.size();\",\n \" vector <int> sa(n);\",\n \" iota(sa.begin(), sa.end(), 0);\",\n \" sort(sa.begin(), sa.end(), [&](int l, int r) {\",\n \" if (l == r) return false;\",\n \" while (l < n && r < n) {\",\n \" if (s[l] != s[r]) return s[l] < s[r];\",\n \" l++; r++;\",\n \" }\",\n \" return l == n;\",\n \" });\",\n \" return sa;\",\n \"}\",\n \"vector <int> sa_doubling(const vector <int>& s) {\",\n \" int n = s.size();\",\n \" vector <int> sa(n), rnk = s, tmp(n);\",\n \" iota(sa.begin(), sa.end(), 0);\",\n \" for (int k = 1; k < n; k <<= 1) {\",\n \" auto cmp = [&](int x, int y) {\",\n \" if (rnk[x] != rnk[y]) return rnk[x] < rnk[y];\",\n \" int rx = x + k < n ? rnk[x + k] : -1;\",\n \" int ry = y + k < n ? rnk[y + k] : -1;\",\n \" return rx < ry;\",\n \" };\",\n \" sort(sa.begin(), sa.end(), cmp);\",\n \" tmp[sa[0]] = 0;\",\n \" for (int i = 1; i < n; ++i) tmp[sa[i]] = tmp[sa[i - 1]] + (cmp(sa[i - 1], sa[i]) ? 1 : 0);\",\n \" swap(tmp, rnk);\",\n \" }\",\n \" return sa;\",\n \"}\",\n \"template <int THRESHOLD_NAIVE = 10, int THRESHOLD_DOUBLING = 40>\",\n \"vector <int> sa_is(const vector <int> &s, int upper) {\",\n \" int n = int(s.size());\",\n \" if (n == 0) return {};\",\n \" if (n == 1) return {0};\",\n \" if (n == 2) {\",\n \" if (s[0] < s[1]) return {0, 1};\",\n \" return {1, 0};\",\n \" }\",\n \" if (n < THRESHOLD_NAIVE) return sa_naive(s);\",\n \" if (n < THRESHOLD_DOUBLING) return sa_doubling(s);\",\n \" vector <int> sa(n);\",\n \" vector <bool> ls(n);\",\n \" for (int i = n - 2; i >= 0; --i) ls[i] = s[i] == s[i + 1] ? ls[i + 1] : s[i] < s[i + 1];\",\n \" vector <int> sum_l(upper + 1), sum_s(upper + 1);\",\n \" for (int i = 0; i < n; ++i) (ls[i] ? sum_l[s[i] + 1] : sum_s[s[i]])++;\",\n \" for (int i = 0; i <= upper; ++i) {\",\n \" sum_s[i] += sum_l[i];\",\n \" if (i < upper) sum_l[i + 1] += sum_s[i];\",\n \" }\",\n \" auto induce = [&](const vector <int>& lms) {\",\n \" fill(sa.begin(), sa.end(), -1);\",\n \" vector <int> buf(upper + 1);\",\n \" copy(sum_s.begin(), sum_s.end(), buf.begin());\",\n \" for (auto d: lms) if (d != n) sa[buf[s[d]]++] = d;\",\n \" copy(sum_l.begin(), sum_l.end(), buf.begin());\",\n \" sa[buf[s[n - 1]]++] = n - 1;\",\n \" for (int i = 0; i < n; ++i) {\",\n \" int v = sa[i];\",\n \" if (v >= 1 && !ls[v - 1]) sa[buf[s[v - 1]]++] = v - 1;\",\n \" }\",\n \" copy(sum_l.begin(), sum_l.end(), buf.begin());\",\n \" for (int i = n - 1; i >= 0; --i) {\",\n \" int v = sa[i];\",\n \" if (v >= 1 && ls[v - 1]) sa[--buf[s[v - 1] + 1]] = v - 1;\",\n \" }\",\n \" };\",\n \" vector <int> lms_map(n + 1, -1);\",\n \" int m = 0;\",\n \" for (int i = 1; i < n; ++i) if (!ls[i - 1] && ls[i]) lms_map[i] = m++;\",\n \" vector <int> lms;\",\n \" lms.reserve(m);\",\n \" for (int i = 1; i < n; ++i) if (!ls[i - 1] && ls[i]) lms.push_back(i);\",\n \" induce(lms);\",\n \" if (m) {\",\n \" vector <int> sorted_lms;\",\n \" sorted_lms.reserve(m);\",\n \" for (int v: sa) if (lms_map[v] != -1) sorted_lms.push_back(v);\",\n \" vector <int> rec_s(m);\",\n \" int rec_upper = 0;\",\n \" rec_s[lms_map[sorted_lms[0]]] = 0;\",\n \" for (int i = 1; i < m; ++i) {\",\n \" int l = sorted_lms[i - 1], r = sorted_lms[i];\",\n \" int end_l = (lms_map[l] + 1 < m) ? lms[lms_map[l] + 1] : n;\",\n \" int end_r = (lms_map[r] + 1 < m) ? lms[lms_map[r] + 1] : n;\",\n \" bool same = true;\",\n \" if (end_l - l != end_r - r) same = false;\",\n \" else {\",\n \" while (l < end_l) {\",\n \" if (s[l] != s[r]) break;\",\n \" l++; r++;\",\n \" }\",\n \" if (l == n || s[l] != s[r]) same = false;\",\n \" }\",\n \" if (!same) rec_upper++;\",\n \" rec_s[lms_map[sorted_lms[i]]] = rec_upper;\",\n \" }\",\n \" auto rec_sa = sa_is<THRESHOLD_NAIVE, THRESHOLD_DOUBLING>(rec_s, rec_upper);\",\n \" for (int i = 0; i < m; ++i) sorted_lms[i] = lms[rec_sa[i]];\",\n \" induce(sorted_lms);\",\n \" }\",\n \" return sa;\",\n \"}\",\n \"vector <int> suffix_array(const vector <int> &s, int upper) {\",\n \" assert(0 <= upper);\",\n \" for (int d: s) assert(0 <= d && d <= upper);\",\n \" auto sa = sa_is(s, upper);\",\n \" return sa;\",\n \"}\",\n \"template <class T> vector <int> suffix_array(const vector <T> &s) {\",\n \" int n = s.size();\",\n \" vector <int> idx(n);\",\n \" iota(idx.begin(), idx.end(), 0);\",\n \" sort(idx.begin(), idx.end(), [&](int l, int r) { return s[l] < s[r]; });\",\n \" vector <int> s2(n);\",\n \" int now = 0;\",\n \" for (int i = 0; i < n; ++i) {\",\n \" if (i && s[idx[i - 1]] != s[idx[i]]) now++;\",\n \" s2[idx[i]] = now;\",\n \" }\",\n \" return sa_is(s2, now);\",\n \"}\",\n \"vector <int> suffix_array(const string& s) {\",\n \" int n = s.size();\",\n \" vector <int> s2(n);\",\n \" for (int i = 0; i < n; ++i) s2[i] = s[i];\",\n \" return sa_is(s2, 255);\",\n \"}\",\n \"template <class T> vector <int> lcp_array(const vector <T> &s, const vector <int> &sa) {\",\n \" int n = s.size();\",\n \" assert(n > 0);\",\n \" vector <int> rnk(n);\",\n \" for (int i = 0; i < n; ++i) rnk[sa[i]] = i;\",\n \" vector <int> lcp(n - 1);\",\n \" int h = 0;\",\n \" for (int i = 0; i < n; ++i) {\",\n \" if (h > 0) h--;\",\n \" if (!rnk[i]) continue;\",\n \" int j = sa[rnk[i] - 1];\",\n \" for (; j + h < n && i + h < n; h++) if (s[j + h] != s[i + h]) break;\",\n \" lcp[rnk[i] - 1] = h;\",\n \" }\",\n \" return lcp;\",\n \"}\",\n \"vector <int> lcp_array(const string &s, const vector <int> &sa) {\",\n \" int n = s.size();\",\n \" vector <int> s2(n);\",\n \" for (int i = 0; i < n; i++) s2[i] = s[i];\",\n \" return lcp_array(s2, sa);\",\n \"}\",\n \"} using namespace SUFFIX_ARRAY;\"\n ],\n \"description\": \"SUFFIX_ARRAY\"\n },\n \"SUBSET_CONVOLUTION\": {\n \"scope\": \"cpp\",\n \"prefix\": \"SUBSET_CONVOLUTION\",\n \"body\": [\n \"namespace SUBSET_CONVOLUTION {\",\n \" template <class T> void zeta_transform(vector <T> &a, bool rev = false) {\",\n \" int n = 0; while ((1 << n) < (int) a.size()) ++n;\",\n \" a.resize(1 << n);\",\n \" for (int i = 0; i < n; ++i)\",\n \" for (int mask = 0; mask < 1 << n; ++mask)\",\n \" if ((mask >> i & 1) ^ rev) a[mask] += a[mask ^ (1 << i)];\",\n \" }\",\n \" template <class T> void mobius_transform(vector <T> &a, bool rev = false) {\",\n \" int n = 0; while ((1 << n) < (int) a.size()) ++n;\",\n \" a.resize(1 << n);\",\n \" for (int i = 0; i < n; ++i)\",\n \" for (int mask = 0; mask < 1 << n; ++mask)\",\n \" if ((mask >> i & 1) ^ rev) a[mask] -= a[mask ^ (1 << i)];\",\n \" }\",\n \" template <class T> vector <T> subset_sum_convolution(const vector <T> &f, const vector <T> &g) {\",\n \" int n = 0; while ((1 << n) < (int) max(f.size(), g.size())) ++n;\",\n \" vector <vector <T>> fhat(n + 1, vector<T>(1 << n)), ghat(n + 1, vector<T>(1 << n));\",\n \" for (int mask = 0; mask < 1 << n; ++mask) {\",\n \" int i = __builtin_popcount(mask);\",\n \" if (mask < (int) f.size()) fhat[i][mask] = f[mask];\",\n \" if (mask < (int) g.size()) ghat[i][mask] = g[mask];\",\n \" }\",\n \" for (int i = 0; i < n; ++i) {\",\n \" zeta_transform(fhat[i]);\",\n \" zeta_transform(ghat[i]);\",\n \" }\",\n \" vector <T> res(1 << n), h(1 << n);\",\n \" for (int i = 0; i <= n; ++i) {\",\n \" for (int j = 0; j <= i; ++j)\",\n \" for (int mask = 0; mask < 1 << n; ++mask)\",\n \" h[mask] += fhat[j][mask] * ghat[i - j][mask];\",\n \" mobius_transform(h);\",\n \" for (int mask = 0; mask < 1 << n; ++mask)\",\n \" if (__builtin_popcount(mask) == i) res[mask] = h[mask];\",\n \" fill(h.begin(), h.end(), T{});\",\n \" }\",\n \" return res;\",\n \" }\",\n \" template <class T> void fft(vector <T> &a, bool rev = false) {\",\n \" int n = a.size();\",\n \" for (int i = 1; i < n; i <<= 1) {\",\n \" for (int mask = 0; mask < n; ++mask) {\",\n \" if (!(mask & i)) {\",\n \" T u = a[mask], v = a[mask ^ i];\",\n \" a[mask] = u + v;\",\n \" a[mask ^ i] = u - v;\",\n \" }\",\n \" }\",\n \" }\",\n \" if (rev) {\",\n \" T inv = T(1) / n;\",\n \" for (int mask = 0; mask < n; ++mask) a[mask] *= inv;\",\n \" }\",\n \" }\",\n \" template <class T> vector <T> or_convolution(vector <T> f, vector <T> g) {\",\n \" int n = 1;\",\n \" while (n < (int) max(f.size(), g.size())) n <<= 1;\",\n \" f.resize(n); g.resize(n);\",\n \" zeta_transform(f);\",\n \" zeta_transform(g);\",\n \" for (int i = 0; i < n; ++i) f[i] *= g[i];\",\n \" mobius_transform(f);\",\n \" return f;\",\n \" }\",\n \" template <class T> vector <T> and_convolution(vector <T> f, vector <T> g) {\",\n \" int n = 1;\",\n \" while (n < (int) max(f.size(), g.size())) n <<= 1;\",\n \" f.resize(n); g.resize(n);\",\n \" zeta_transform(f, true);\",\n \" zeta_transform(g, true);\",\n \" for (int i = 0; i < n; ++i) f[i] *= g[i];\",\n \" mobius_transform(f, true);\",\n \" return f;\",\n \" }\",\n \" template <class T> vector <T> xor_convolution(vector <T> f, vector <T> g) {\",\n \" int n = 1;\",\n \" while (n < (int) max(f.size(), g.size())) n <<= 1;\",\n \" f.resize(n); g.resize(n);\",\n \" fft(f); fft(g);\",\n \" for (int i = 0; i < n; ++i) f[i] *= g[i];\",\n \" fft(f, true);\",\n \" return f;\",\n \" }\",\n \"} using namespace SUBSET_CONVOLUTION;\"\n ],\n \"description\": \"SUBSET_CONVOLUTION\"\n },\n \"STRONGLY_CONNECTED_COMPONENT\": {\n \"scope\": \"cpp\",\n \"prefix\": \"STRONGLY_CONNECTED_COMPONENT\",\n \"body\": [\n \"template <class E> struct csr {\",\n \" vector <int> st;\",\n \" vector <E> lst;\",\n \" explicit csr(int n, const vector <pair <int, E>> &edges): st(n + 1), lst(edges.size()) {\",\n \" for (auto e: edges) st[e.first + 1]++;\",\n \" for (int i = 1; i <= n; i++) st[i] += st[i - 1];\",\n \" auto cnt = st;\",\n \" for (auto e: edges) lst[cnt[e.first]++] = e.second;\",\n \" }\",\n \"};\",\n \"\",\n \"struct StronglyConnectedComponent {\",\n \" int n;\",\n \" vector <pair <int, int>> edges;\",\n \" vector <int> low, num;\",\n \" StronglyConnectedComponent(int _n) : n(_n) {}\",\n \" void add(int from, int to) { edges.emplace_back(from, to); }\",\n \" pair <int, vector <int>> scc_ids() {\",\n \" auto g = csr<int>(n, edges);\",\n \" int t = 0, group_num = 0;\",\n \" low.resize(n);\",\n \" num.assign(n, -1);\",\n \" vector <int> visited, ids(n);\",\n \" visited.reserve(n);\",\n \" auto dfs = [&] (auto self, int u) -> void {\",\n \" low[u] = num[u] = t++;\",\n \" visited.push_back(u);\",\n \" for (int i = g.st[u]; i < g.st[u + 1]; i++) {\",\n \" int v = g.lst[i];\",\n \" if (num[v] == -1) {\",\n \" self(self, v);\",\n \" low[u] = min(low[u], low[v]);\",\n \" } else low[u] = min(low[u], num[v]);\",\n \" }\",\n \" if (low[u] == num[u]) {\",\n \" int v;\",\n \" do {\",\n \" v = visited.back(); visited.pop_back();\",\n \" num[v] = n;\",\n \" ids[v] = group_num;\",\n \" } while (v != u);\",\n \" group_num++;\",\n \" }\",\n \" };\",\n \" for (int i = 0; i < n; i++) if (num[i] == -1) dfs(dfs, i);\",\n \" for (auto &x: ids) x = group_num - 1 - x;\",\n \" return {group_num, ids};\",\n \" }\",\n \" vector <vector <int>> scc() {\",\n \" auto [group_num, ids] = scc_ids();\",\n \" vector<int> cnt(group_num);\",\n \" for (int x: ids) cnt[x]++;\",\n \" vector<vector<int>> groups(group_num);\",\n \" for (int i = 0; i < group_num; i++) groups[i].reserve(cnt[i]);\",\n \" for (int i = 0; i < n; i++) groups[ids[i]].push_back(i);\",\n \" return groups;\",\n \" }\",\n \"};\"\n ],\n \"description\": \"STRONGLY_CONNECTED_COMPONENT\"\n },\n \"MANACHER\": {\n \"scope\": \"cpp\",\n \"prefix\": \"MANACHER\",\n \"body\": [\n \"template <typename T> vector <int> manacher(int n, const T &s) {\",\n \" if (!n) return vector<int>();\",\n \" vector <int> res(2 * n - 1);\",\n \" int l = -1, r = -1;\",\n \" for (int z = 0; z < 2 * n - 1; z++) {\",\n \" int i = (z + 1) >> 1;\",\n \" int j = z >> 1;\",\n \" int p = (i >= r ? 0 : min(r - i, res[2 * (l + r) - z]));\",\n \" while (j + p + 1 < n && i - p - 1 >= 0 && s[j + p + 1] == s[i - p - 1]) ++p;\",\n \" if (j + p > r) l = i - p, r = j + p;\",\n \" res[z] = p;\",\n \" }\",\n \" return res;\",\n \" // res[2 * i] = odd radius in position i\",\n \" // res[2 * i + 1] = even radius between positions i and i + 1\",\n \"}\",\n \"template <typename T> vector<int> manacher(const T &s) { return manacher(s.size(), s); }\"\n ],\n \"description\": \"MANACHER\"\n },\n \"MAX_FLOW\": {\n \"scope\": \"cpp\",\n \"prefix\": \"MAX_FLOW\",\n \"body\": [\n \"namespace MAX_FLOW {\",\n \"template <class T> struct Edge {\",\n \" int from, to;\",\n \" T cap, flow;\",\n \" int nxt;\",\n \" Edge(int from = 0, int to = 0, T cap = 0, int nxt = -1): from(from), to(to), cap(cap), flow(0), nxt(nxt) {}\",\n \"};\",\n \"\",\n \"struct PushRelabel {\",\n \" struct Edge {\",\n \" int to, id;\",\n \" long long f, c;\",\n \" Edge(int to, int id, long long f, long long c): to(to), id(id), f(f), c(c) {}\",\n \" };\",\n \" vector<vector<Edge>> g;\",\n \" vector<long long> ec;\",\n \" vector<Edge*> cur;\",\n \" vector<vector<int>> hs; vector<int> H;\",\n \" PushRelabel(int n) : g(n), ec(n), cur(n), hs(2*n), H(n) {}\",\n \" void add(int s, int t, long long cap, long long rcap=0) {\",\n \" if (s == t) return;\",\n \" g[s].emplace_back(t, (int)g[t].size(), 0, cap);\",\n \" g[t].emplace_back(s, (int)g[s].size()-1, 0, rcap);\",\n \" }\",\n \" void addFlow(Edge& e, long long f) {\",\n \" Edge &back = g[e.to][e.id];\",\n \" if (!ec[e.to] && f) hs[H[e.to]].push_back(e.to);\",\n \" e.f += f; e.c -= f; ec[e.to] += f;\",\n \" back.f -= f; back.c += f; ec[back.to] -= f;\",\n \" }\",\n \" long long max_flow(int s, int t) {\",\n \" int v = g.size(); H[s] = v; ec[t] = 1;\",\n \" vector<int> co(2*v); co[0] = v-1;\",\n \" for (int i = 0; i < v; ++i) cur[i] = g[i].data();\",\n \" for (Edge& e : g[s]) addFlow(e, e.c);\",\n \" for (int hi = 0;;) {\",\n \" while (hs[hi].empty()) if (!hi--) return -ec[s];\",\n \" int u = hs[hi].back(); hs[hi].pop_back();\",\n \" while (ec[u] > 0) // discharge u\",\n \" if (cur[u] == g[u].data() + (int) g[u].size()) {\",\n \" H[u] = 1e9;\",\n \" for (Edge& e : g[u]) if (e.c && H[u] > H[e.to]+1)\",\n \" H[u] = H[e.to]+1, cur[u] = &e;\",\n \" if (++co[H[u]], !--co[hi] && hi < v)\",\n \" for (int i = 0; i < v; ++i) if (hi < H[i] && H[i] < v)\",\n \" --co[H[i]], H[i] = v + 1;\",\n \" hi = H[u];\",\n \" } else if (cur[u]->c && H[u] == H[cur[u]->to]+1)\",\n \" addFlow(*cur[u], min(ec[u], cur[u]->c));\",\n \" else ++cur[u];\",\n \" }\",\n \" }\",\n \" bool leftOfMinCut(int a) { return H[a] >= (int)g.size(); }\",\n \"};\",\n \"\",\n \"template <class T> struct Dinic {\",\n \" static constexpr T inf = numeric_limits<T>::max();\",\n \" int n, ss, tt;\",\n \" vector <Edge <T>> edges;\",\n \" vector <int> head, level, ptr, q;\",\n \" Dinic(int n = 0): n(n), head(n, -1), level(n), ptr(n), q(n) {}\",\n \" int add(int from, int to, T cap, bool bi = false) {\",\n \" int id = edges.size();\",\n \" edges.emplace_back(from, to, cap, head[from]);\",\n \" head[from] = id;\",\n \" edges.emplace_back(to, from, bi ? cap : 0, head[to]);\",\n \" head[to] = id + 1;\",\n \" return id;\",\n \" }\",\n \" bool bfs(void) {\",\n \" fill(level.begin(), level.end(), n + 1);\",\n \" q[0] = ss; level[ss] = 0;\",\n \" for (int l = 0, r = 1; l < r; ) {\",\n \" int u = q[l++];\",\n \" for (int i = head[u]; i != -1; i = edges[i].nxt) if (edges[i].cap != edges[i].flow) {\",\n \" int v = edges[i].to;\",\n \" if (level[v] == n + 1) {\",\n \" level[v] = level[u] + 1;\",\n \" if (v == tt) return true;\",\n \" q[r++] = v;\",\n \" }\",\n \" }\",\n \" }\",\n \" return false;\",\n \" }\",\n \" T dfs(int u, T pushed) {\",\n \" if (u == ss) return pushed;\",\n \" T flow = 0;\",\n \" for (int &j = ptr[u]; j != -1; j = edges[j].nxt) {\",\n \" int i = j ^ 1;\",\n \" if (edges[i].cap - edges[i].flow == 0 || level[edges[i].from] >= level[u]) continue;\",\n \" T tr = dfs(edges[i].from, min(pushed - flow, edges[i].cap - edges[i].flow));\",\n \" if (!tr) continue;\",\n \" edges[i].flow += tr;\",\n \" edges[j].flow -= tr;\",\n \" flow += tr;\",\n \" if (flow == pushed) return flow;\",\n \" }\",\n \" level[u] = n;\",\n \" return flow;\",\n \" }\",\n \" T max_flow(int s, int t) {\",\n \" ss = s; tt = t;\",\n \" for (Edge <T> &e: edges) e.flow = 0;\",\n \" T flow = 0;\",\n \" q[0] = ss;\",\n \" for (int L = 30; L >= 0; --L) {\",\n \" while (true) {\",\n \" fill(level.begin(), level.end(), 0);\",\n \" int l = 0, r = level[s] = 1;\",\n \" while (l < r && !level[t]) {\",\n \" int u = q[l++];\",\n \" for (int i = head[u]; i != -1; i = edges[i].nxt) {\",\n \" if (!level[edges[i].to] && (edges[i].cap - edges[i].flow) >> L) {\",\n \" q[r++] = edges[i].to;\",\n \" level[edges[i].to] = level[u] + 1;\",\n \" }\",\n \" }\",\n \" }\",\n \" if (!level[t]) break;\",\n \" copy(head.begin(), head.end(), ptr.begin());\",\n \" flow += dfs(t, inf);\",\n \" }\",\n \" }\",\n \" return flow;\",\n \" }\",\n \"};\",\n \"template <class Cap, class Cost> struct CEdge {\",\n \" int from, to;\",\n \" Cap cap, flow;\",\n \" Cost cost;\",\n \" int nxt;\",\n \" CEdge(int from = 0, int to = 0, Cap cap = 0, Cost cost = 0, int nxt = 0): from(from), to(to), cap(cap), flow(0), cost(cost), nxt(nxt) {}\",\n \"};\",\n \"template <typename Cap, typename Cost> struct MinCostFlow {\",\n \" static constexpr Cap inf_cap = numeric_limits<Cap>::max();\",\n \" static constexpr Cost inf_cost = numeric_limits<Cost>::max() >> 1;\",\n \" int n;\",\n \" vector <CEdge <Cap, Cost>> edges;\",\n \" vector <Cost> d, pot;\",\n \" priority_queue <pair <Cost, int>> q;\",\n \" vector <int> trace, head;\",\n \" MinCostFlow(int n_ = 0) : n(n_), d(n), pot(n, 0), trace(n), head(n, -1) {}\",\n \" int add(int from, int to, Cap cap, Cost cost) {\",\n \" int id = edges.size();\",\n \" edges.emplace_back(from, to, cap, cost, head[from]);\",\n \" head[from] = id;\",\n \" edges.emplace_back(to, from, 0, -cost, head[to]);\",\n \" head[to] = id + 1;\",\n \" return id;\",\n \" }\",\n \" void expath(int st) {\",\n \" fill(d.begin(), d.end(), inf_cost);\",\n \" while (!q.empty()) q.pop();\",\n \" d[st] = 0;\",\n \" q.push({pot[st], st});\",\n \" while (!q.empty()) {\",\n \" auto [du, u] = q.top(); q.pop();\",\n \" if (du != pot[u] - d[u]) continue;\",\n \" for (int i = head[u]; i != -1; i = edges[i].nxt) {\",\n \" int v = edges[i].to;\",\n \" if (edges[i].cap != edges[i].flow && d[u] + edges[i].cost < d[v]) {\",\n \" d[v] = d[u] + edges[i].cost;\",\n \" trace[v] = i;\",\n \" q.push({pot[v] - d[v], v});\",\n \" }\",\n \" }\",\n \" }\",\n \" swap(d, pot);\",\n \" }\",\n \" pair <Cap, Cost> max_flow(int s, int t) {\",\n \" Cap flow = 0;\",\n \" Cost cost = 0;\",\n \" bool ok = true;\",\n \" for (auto &e: edges) if (e.cap != e.flow && e.cost + pot[e.from] - pot[e.to] < 0) {\",\n \" ok = false;\",\n \" break;\",\n \" }\",\n \" if (ok) expath(s);\",\n \" else {\",\n \" vector <int> deg(n, 0);\",\n \" for (int u = 0; u < n; ++u)\",\n \" for (int i = head[u]; i != -1; i = edges[i].nxt)\",\n \" if (edges[i].cap != edges[i].flow) ++deg[edges[i].to];\",\n \" vector <int> que;\",\n \" for (int i = 0; i < n; ++i) if (!deg[i]) que.push_back(i);\",\n \" for (int b = 0; b < (int) que.size(); ++b) {\",\n \" for (int i = head[que[b]]; i != -1; i = edges[i].nxt) if (edges[i].cap != edges[i].flow) {\",\n \" --deg[edges[i].to];\",\n \" if (!deg[edges[i].to]) que.push_back(edges[i].to);\",\n \" }\",\n \" }\",\n \" fill(pot.begin(), pot.end(), inf_cost);\",\n \" pot[s] = 0;\",\n \" if ((int) que.size() == n) {\",\n \" for (int u: que) if (pot[u] < inf_cost) {\",\n \" for (int i = head[u]; i != -1; i = edges[i].nxt) if (edges[i].cap != edges[i].flow && pot[u] + edges[i].cost < pot[edges[i].to]) {\",\n \" pot[edges[i].to] = pot[u] + edges[i].cost;\",\n \" trace[edges[i].to] = i;\",\n \" }\",\n \" }\",\n \" } else {\",\n \" que.assign(1, s);\",\n \" vector <bool> in_queue(n, false);\",\n \" in_queue[s] = true;\",\n \" for (int b = 0; b < (int)que.size(); b++) {\",\n \" int u = que[b];\",\n \" in_queue[u] = false;\",\n \" for (int i = head[u]; i != -1; i = edges[i].nxt) if (edges[i].cap != edges[i].flow && pot[u] + edges[i].cost < pot[edges[i].to]) {\",\n \" pot[edges[i].to] = pot[u] + edges[i].cost;\",\n \" trace[edges[i].to] = i;\",\n \" if (!in_queue[edges[i].to]) {\",\n \" que.push_back(edges[i].to);\",\n \" in_queue[edges[i].to] = true;\",\n \" }\",\n \" }\",\n \" }\",\n \" }\",\n \" }\",\n \" while (pot[t] < inf_cost) {\",\n \" Cap push = inf_cap;\",\n \" for (int u = t; u != s; u = edges[trace[u]].from)\",\n \" push = min(push, edges[trace[u]].cap - edges[trace[u]].flow);\",\n \" for (int u = t; u != s; u = edges[trace[u]].from) {\",\n \" edges[trace[u]].flow += push;\",\n \" edges[trace[u] ^ 1].flow -= push;\",\n \" }\",\n \" flow += push; cost += push * pot[t];\",\n \" expath(s);\",\n \" }\",\n \" return {flow, cost};\",\n \" }\",\n \"};\",\n \"template <bool ToShuffle = false> struct MaxMatching {\",\n \" int n;\",\n \" vector <int> match, gr, cnt;\",\n \" vector <pair <int, int>> edg;\",\n \" MaxMatching(int n = 0): n(n) {}\",\n \" void add(int u, int v) { edg.emplace_back(u, v); }\",\n \" struct Data {\",\n \" int used, prev, root, depth;\",\n \" Data(int used, int prev, int root, int depth): used(used), prev(prev), root(root), depth(depth) {}\",\n \" };\",\n \" vector <pair <int, int>> max_matching() {\",\n \" if constexpr (ToShuffle) {\",\n \" mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());\",\n \" shuffle(edg.begin(), edg.end(), rng);\",\n \" }\",\n \" match.assign(n, -1);\",\n \" gr.resize(edg.size() << 1);\",\n \" cnt.assign(n + 1, 0);\",\n \" for (auto [u, v]: edg) ++cnt[u], ++cnt[v];\",\n \" for (int i = 0, c = 0; i <= n; ++i) c += cnt[i], cnt[i] = c;\",\n \" for (int i = edg.size(); i-- > 0; ) {\",\n \" auto &[u, v] = edg[i];\",\n \" gr[--cnt[u]] = v;\",\n \" gr[--cnt[v]] = u;\",\n \" }\",\n \" vector <Data> data(n, Data(0, 0, 0, 0));\",\n \" int used_mark = 0, db_ptr, de_ptr;\",\n \" vector <int> dq(n);\",\n \" while (true) {\",\n \" used_mark++; db_ptr = de_ptr = 0;\",\n \" for (int i = 0; i < n; ++i) if (match[i] == -1) {\",\n \" data[i] = Data(used_mark, -1, i, 0);\",\n \" dq[de_ptr++] = i;\",\n \" }\",\n \" int aug_cnt = 0;\",\n \" while (db_ptr < de_ptr) {\",\n \" int u = dq[db_ptr++];\",\n \" if (match[data[u].root] != -1) continue;\",\n \" bool aug_found = false;\",\n \" for (int ti = cnt[u]; ti < cnt[u + 1]; ++ti) {\",\n \" int t = gr[ti];\",\n \" if (data[t].used == used_mark && data[t].depth == 0 && match[data[t].root] == -1) {\",\n \" aug_cnt++;\",\n \" match[u] = t, match[t] = u;\",\n \" int len = 1;\",\n \" for (int x = u; data[x].prev != -1; x = data[x].prev) {\",\n \" if (data[x].depth == 1) match[x] = data[x].prev, match[data[x].prev] = x;\",\n \" len++;\",\n \" }\",\n \" for (int x = t; data[x].prev != -1; x = data[x].prev) {\",\n \" if (data[x].depth == 1) match[x] = data[x].prev, match[data[x].prev] = x;\",\n \" len++;\",\n \" }\",\n \" aug_found = true;\",\n \" break;\",\n \" }\",\n \" }\",\n \" if (aug_found) continue;\",\n \" for (int ti = cnt[u]; ti < cnt[u + 1]; ++ti) {\",\n \" int t = gr[ti];\",\n \" if (data[t].used != used_mark) {\",\n \" int t2 = match[t];\",\n \" data[t] = Data(used_mark, u, data[u].root, 1);\",\n \" data[t2] = Data(used_mark, t, data[u].root, 0);\",\n \" dq[de_ptr++] = t2;\",\n \" }\",\n \" }\",\n \" }\",\n \" if (!aug_cnt) break;\",\n \" }\",\n \" vector <pair <int, int>> res;\",\n \" for (int i = 0; i < n; ++i) if (i < match[i]) res.push_back({i, match[i]});\",\n \" return res;\",\n \" }\",\n \" pair <vector <int>, vector <int>> minimum_vertex_cover() {\",\n \" vector <int> q(n);\",\n \" int qb = 0, qe = 0;\",\n \" vector <bool> f(n);\",\n \" for (int i = 0; i < n; ++i) if (match[i] == -1) q[qe++] = i;\",\n \" while (qb < qe) {\",\n \" int u = q[qb++];\",\n \" for (int i = cnt[u]; i < cnt[u + 1]; ++i) {\",\n \" int v = gr[i];\",\n \" if (!f[v]) {\",\n \" f[v] = true;\",\n \" q[qe++] = match[v];\",\n \" }\",\n \" }\",\n \" }\",\n \" for (int i = 0; i < n; ++i) if (match[i] != -1 && !f[i] && !f[match[i]]) f[i] = true;\",\n \" vector <int> L, R;\",\n \" for (int i = 0; i < n; ++i) (f[i] ? L : R).push_back(i);\",\n \" return {L, R};\",\n \" }\",\n \"};\",\n \"template <class T> struct Hungarian {\",\n \" int n;\",\n \" vector <vector <T>> c;\",\n \" vector <T> fx, fy, d;\",\n \" vector <int> l, r, arg, trace;\",\n \" int start, finish;\",\n \" static constexpr T inf = numeric_limits<T>::max() >> 1;\",\n \" Hungarian() {}\",\n \" Hungarian(int n1, int n2): n(max(n1, n2)), c(n, vector<T>(n, inf)), fx(n), fy(n), d(n), l(n, -1), r(n, -1), arg(n), trace(n) {}\",\n \" void add(int u, int v, T cost) { c[u][v] = min(c[u][v], cost); }\",\n \" T getC(int u, int v) { return c[u][v] - fx[u] - fy[v]; }\",\n \" T max_matching() {\",\n \" for (int u = 0; u < n; ++u) {\",\n \" fx[u] = c[u][0];\",\n \" for (int v = 0; v < n; ++v) fx[u] = min(fx[u], c[u][v]);\",\n \" }\",\n \" for (int v = 0; v < n; ++v) {\",\n \" fy[v] = c[0][v] - fx[0];\",\n \" for (int u = 0; u < n; ++u) fy[v] = min(fy[v], c[u][v] - fx[u]);\",\n \" }\",\n \" vector <int> q(n);\",\n \" int qb, qe;\",\n \" for (int u = 0; u < n; ++u) {\",\n \" start = u;\",\n \" qb = qe = 0;\",\n \" q[qe++] = start;\",\n \" fill(trace.begin(), trace.end(), -1);\",\n \" for (int v = 0; v < n; ++v) d[v] = getC(start, v), arg[v] = start;\",\n \" finish = -1;\",\n \" while (finish == -1) {\",\n \" while (qb < qe) {\",\n \" int u = q[qb++];\",\n \" for (int v = 0; v < n; ++v) if (trace[v] == -1) {\",\n \" T w = getC(u, v);\",\n \" if (!w) {\",\n \" trace[v] = u;\",\n \" if (r[v] == -1) {\",\n \" finish = v;\",\n \" goto nxt;\",\n \" }\",\n \" q[qe++] = r[v];\",\n \" }\",\n \" if (d[v] > w) d[v] = w, arg[v] = u;\",\n \" }\",\n \" }\",\n \" nxt:;\",\n \" if (finish == -1) {\",\n \" T delta = inf;\",\n \" for (int v = 0; v < n; ++v) if (trace[v] == -1 && d[v] < delta) delta = d[v];\",\n \" fx[start] += delta;\",\n \" for (int v = 0; v < n; ++v) {\",\n \" if (trace[v] != -1) {\",\n \" int u = r[v];\",\n \" fy[v] -= delta; fx[u] += delta;\",\n \" } else d[v] -= delta;\",\n \" }\",\n \" for (int v = 0; v < n; ++v) if (trace[v] == -1 && !d[v]) {\",\n \" trace[v] = arg[v];\",\n \" if (r[v] == -1) {\",\n \" finish = v;\",\n \" break;\",\n \" }\",\n \" q[qe++] = r[v];\",\n \" }\",\n \" }\",\n \" }\",\n \" do {\",\n \" int u = trace[finish], nxt = l[u];\",\n \" l[u] = finish; r[finish] = u;\",\n \" finish = nxt;\",\n \" } while (finish != -1);\",\n \" }\",\n \" T ans = 0;\",\n \" for (int i = 0; i < n; ++i) {\",\n \" if (c[i][l[i]] != inf) ans += c[i][l[i]];\",\n \" else l[i] = -1;\",\n \" }\",\n \" return ans;\",\n \" }\",\n \"};\",\n \"} using namespace MAX_FLOW;\"\n ],\n \"description\": \"MAX_FLOW\"\n },\n \"BLOSSOM\": {\n \"scope\": \"cpp\",\n \"prefix\": \"BLOSSOM\",\n \"body\": [\n \"struct Blossom {\",\n \" int n;\",\n \" vector<vector<int>> adj;\",\n \" int n_matches;\",\n \" vector<int> mate;\",\n \"\",\n \" int q_n;\",\n \" vector<int> q;\",\n \" int book_mark;\",\n \" vector<int> book;\",\n \"\",\n \" vector<int> type;\",\n \" vector<int> fa;\",\n \" vector<int> bel;\",\n \"\",\n \" Blossom(int n) : n(n), adj(n), n_matches(0), mate(n, -1), q(n), book_mark(0), book(n), type(n), fa(n), bel(n) {}\",\n \"\",\n \" void add(int u, int v) {\",\n \" adj[u].push_back(v);\",\n \" adj[v].push_back(u);\",\n \" }\",\n \"\",\n \" void augment(int u) {\",\n \" while (u != -1) {\",\n \" int pv = fa[u];\",\n \" int ppv = (pv != -1) ? mate[pv] : -1;\",\n \" mate[u] = pv;\",\n \" mate[pv] = u;\",\n \" u = ppv;\",\n \" }\",\n \" }\",\n \"\",\n \" int get_lca(int u, int v) {\",\n \" ++book_mark;\",\n \" u = bel[u];\",\n \" v = bel[v];\",\n \" while (true) {\",\n \" if (u != -1) {\",\n \" if (book[u] == book_mark) return u;\",\n \" book[u] = book_mark;\",\n \" if (mate[u] != -1) u = bel[fa[mate[u]]];\",\n \" else u = -1;\",\n \" }\",\n \" std::swap(u, v);\",\n \" }\",\n \" }\",\n \"\",\n \" void go_up(int u, int v, int mv) {\",\n \" while (bel[u] != mv) {\",\n \" fa[u] = v;\",\n \" v = mate[u];\",\n \" if (type[v] == 1) {\",\n \" type[v] = 0;\",\n \" q[q_n++] = v;\",\n \" }\",\n \" if (bel[u] == u) bel[u] = mv;\",\n \" if (bel[v] == v) bel[v] = mv;\",\n \" u = fa[v];\",\n \" }\",\n \" }\",\n \"\",\n \" bool match(int sv) {\",\n \" for (int i = 0; i < n; ++i) {\",\n \" bel[i] = i;\",\n \" type[i] = -1;\",\n \" fa[i] = -1;\",\n \" }\",\n \"\",\n \" q_n = 0;\",\n \" q[q_n++] = sv;\",\n \" type[sv] = 0;\",\n \"\",\n \" for (int i = 0; i < q_n; ++i) {\",\n \" int u = q[i];\",\n \" for (int v : adj[u]) {\",\n \" if (bel[u] == bel[v] || type[v] == 1) continue;\",\n \" if (type[v] == -1) {\",\n \" fa[v] = u;\",\n \" type[v] = 1;\",\n \" if (mate[v] == -1) {\",\n \" augment(v);\",\n \" return true;\",\n \" }\",\n \" type[mate[v]] = 0;\",\n \" q[q_n++] = mate[v];\",\n \" } else {\",\n \" int lca = get_lca(u, v);\",\n \" go_up(u, v, lca);\",\n \" go_up(v, u, lca);\",\n \" for (int j = 0; j < n; ++j) {\",\n \" bel[j] = bel[bel[j]];\",\n \" }\",\n \" }\",\n \" }\",\n \" }\",\n \" return false;\",\n \" }\",\n \"\",\n \" int max_matching() {\",\n \" n_matches = 0;\",\n \" for (int i = 0; i < n; ++i) {\",\n \" if (mate[i] == -1 && match(i)) {\",\n \" ++n_matches;\",\n \" }\",\n \" }\",\n \" return n_matches;\",\n \" }\",\n \"};\"\n ],\n \"description\": \"BLOSSOM\"\n },\n \"GCD\": {\n \"scope\": \"cpp\",\n \"prefix\": \"GCD\",\n \"body\": [\n \"int gcd(int a, int b) {\",\n \" return std::gcd(a, b);\",\n \"}\",\n \"\",\n \"long long gcdll(long long a, long long b) {\",\n \" return std::gcd(a, b);\",\n \"}\"\n ],\n \"description\": \"GCD\"\n },\n \"XOR_BASIS_ONLINE\": {\n \"scope\": \"cpp\",\n \"prefix\": \"XOR_BASIS_ONLINE\",\n \"body\": [\n \"namespace XOR_BASIS_ONLINE {\",\n \" template <typename T> bool umin(T &a, T b) { if (b < a) return a = b, true; return false; }\",\n \" template <typename T> bool umax(T &a, T b) { if (a < b) return a = b, true; return false; }\",\n \" template <class T> struct xor_basis_node {\",\n \" T val, mask;\",\n \" int id, high;\",\n \" xor_basis_node(T val, T mask, int id, int high) : val(val), mask(mask), id(id), high(high) {}\",\n \" };\",\n \" template <class T> void swap_bits(T &x, int a, int b) {\",\n \" if ((x >> a & 1) ^ (x >> b & 1)) x ^= (1 << a) ^ (1 << b);\",\n \" }\",\n \" template <class T> struct xor_basis {\",\n \" vector <xor_basis_node <T>> basis;\",\n \" bool add(T x, int id) {\",\n \" T mask = 0;\",\n \" for (auto &i: basis) if (umin(x, x ^ i.val)) mask ^= i.mask;\",\n \" if (x) {\",\n \" mask |= T(1) << basis.size();\",\n \" for (auto &i: basis) if (umin(i.val, i.val ^ x)) i.mask ^= mask;\",\n \" basis.emplace_back(x, mask, id, __lg(x));\",\n \" return true;\",\n \" }\",\n \" return false;\",\n \" }\",\n \" int get_the_same_high_bit(T bits, const vector <T> &val) {\",\n \" for (auto &i: basis) if (__builtin_popcount(val[i.id] & bits) & 1) return i.id;\",\n \" return -1;\",\n \" }\",\n \" T rebuild_and_delete(int id) {\",\n \" int pos = 0, mn = int(1e9), p2 = 0;\",\n \" T bits = 0;\",\n \" for (int i = 0; i < (int) basis.size(); ++i) if (basis[i].id == id) pos = i;\",\n \" for (int i = 0; i < (int) basis.size(); ++i) if (basis[i].mask >> pos & 1) {\",\n \" if (umin(mn, basis[i].high)) p2 = i;\",\n \" bits ^= T(1) << basis[i].high;\",\n \" }\",\n \" if (p2 != pos) {\",\n \" swap(basis[p2].id, basis[pos].id);\",\n \" for (auto &i: basis) swap_bits(i.mask, pos, p2);\",\n \" pos = p2;\",\n \" }\",\n \" for (int i = 0; i < (int) basis.size(); ++i) if (i != pos && basis[i].mask & (1 << pos)) {\",\n \" basis[i].val ^= basis[pos].val;\",\n \" basis[i].mask ^= basis[pos].mask;\",\n \" }\",\n \" T good = (1LL << pos) - 1;\",\n \" T other = ((1LL << basis.size()) - 1) ^ (good | (1LL << pos));\",\n \" basis.erase(basis.begin() + pos);\",\n \" for (auto &i: basis) i.mask = ((i.mask & other) >> 1) | (i.mask & good);\",\n \" return bits;\",\n \" }\",\n \" };\",\n \" template <class T, int max_bit> // not inclusive\",\n \" struct xor_basis_online {\",\n \" vector <xor_basis <T>> basises[max_bit + 1];\",\n \" int mx;\",\n \" vector <pair <int, int>> where;\",\n \" vector <T> val;\",\n \" xor_basis_online(): mx(0), cur_id(0) {}\",\n \" int cur_id;\",\n \" int add(T x) {\",\n \" val.push_back(x);\",\n \" where.emplace_back(-1, -1);\",\n \" int id = cur_id++;\",\n \" if (!x) return id;\",\n \" for (int i = mx; i >= 0; --i) if (!basises[i].empty() && basises[i].back().add(x, id)) {\",\n \" basises[i + 1].push_back(basises[i].back());\",\n \" basises[i].pop_back();\",\n \" umax(mx, i + 1);\",\n \" for (auto &j: basises[i + 1].back().basis)\",\n \" where[j.id] = pair{i + 1, (int) basises[i + 1].size() - 1};\",\n \" return id;\",\n \" }\",\n \" basises[1].push_back(xor_basis<T>());\",\n \" basises[1].back().add(x, id);\",\n \" where.back() = make_pair(1, (int) (basises[1]).size() - 1);\",\n \" umax(mx, 1);\",\n \" return id;\",\n \" }\",\n \" int move_back(int sz, int pos) {\",\n \" int to = (int) basises[sz].size() - 1;\",\n \" if (to == pos) return pos;\",\n \" for (auto &i: basises[sz][pos].basis) where[i.id].second = to;\",\n \" for (auto &i: basises[sz][to].basis) where[i.id].second = pos;\",\n \" swap(basises[sz][pos], basises[sz][to]);\",\n \" return to;\",\n \" }\",\n \" void del(int id) {\",\n \" if (!val[id]) return;\",\n \" auto [sz, pos] = where[id];\",\n \" pos = move_back(sz, pos);\",\n \" while (true) {\",\n \" T bits = basises[sz].back().rebuild_and_delete(id);\",\n \" int i = sz - 1;\",\n \" while (i && basises[i].empty()) --i;\",\n \" int new_id = -1;\",\n \" if (i > 0) new_id = basises[i].back().get_the_same_high_bit(bits, val);\",\n \" if (new_id == -1) {\",\n \" if (sz > 1) {\",\n \" basises[sz - 1].push_back(basises[sz].back());\",\n \" for (auto &j: basises[sz - 1].back().basis)\",\n \" where[j.id] = pair{sz - 1, (int) basises[sz - 1].size() - 1};\",\n \" }\",\n \" basises[sz].pop_back();\",\n \" if (mx > 0 && basises[mx].empty()) --mx;\",\n \" return;\",\n \" }\",\n \" T cur = val[new_id];\",\n \" assert(basises[sz].back().add(cur, new_id));\",\n \" int new_sz = i, new_pos = (int) basises[i].size() - 1;\",\n \" where[new_id] = pair{sz, pos};\",\n \" id = new_id; sz = new_sz; pos = new_pos;\",\n \" }\",\n \" }\",\n \" int size() { return mx; }\",\n \" };\",\n \"}\",\n \"using XOR_BASIS_ONLINE::xor_basis_node;\",\n \"using XOR_BASIS_ONLINE::xor_basis;\",\n \"using XOR_BASIS_ONLINE::xor_basis_online;\"\n ],\n \"description\": \"XOR_BASIS_ONLINE\"\n }\n}",
"extensions": "[{\"identifier\":{\"id\":\"adpyke.codesnap\",\"uuid\":\"8c1fc960-44b1-45e8-89b5-85f982fdaf27\"},\"displayName\":\"CodeSnap\"},{\"identifier\":{\"id\":\"divyanshuagrawal.competitive-programming-helper\",\"uuid\":\"28579c42-9973-4b79-9a1e-76431ea4bc1f\"},\"displayName\":\"Competitive Programming Helper (cph)\"},{\"identifier\":{\"id\":\"formulahendry.code-runner\",\"uuid\":\"a6a0c5b2-d078-4bf5-a9ee-4e37054414b3\"},\"displayName\":\"Code Runner\"},{\"identifier\":{\"id\":\"fwcd.kotlin\",\"uuid\":\"c86bc8a9-fd3b-44db-b28a-2d146cb78d3c\"},\"displayName\":\"Kotlin\"},{\"identifier\":{\"id\":\"github.copilot\",\"uuid\":\"23c4aeee-f844-43cd-b53e-1113e483f1a6\"},\"displayName\":\"GitHub Copilot\"},{\"identifier\":{\"id\":\"github.copilot-chat\",\"uuid\":\"7ec7d6e6-b89e-4cc5-a59b-d6c4d238246f\"},\"displayName\":\"GitHub Copilot Chat\"},{\"identifier\":{\"id\":\"mathiasfrohlich.kotlin\",\"uuid\":\"d36bad53-910d-481a-a7ee-8992450665f6\"},\"displayName\":\"Kotlin Language\"},{\"identifier\":{\"id\":\"monokai.theme-monokai-pro-vscode\",\"uuid\":\"f5d7ffda-c1d6-4070-ba80-803c705a1ee6\"},\"displayName\":\"Monokai Pro\"},{\"identifier\":{\"id\":\"ms-python.debugpy\",\"uuid\":\"4bd5d2c9-9d65-401a-b0b2-7498d9f17615\"},\"displayName\":\"Python Debugger\"},{\"identifier\":{\"id\":\"ms-python.python\",\"uuid\":\"f1f59ae4-9318-4f3c-a9b5-81b2eaa5f8a5\"},\"displayName\":\"Python\"},{\"identifier\":{\"id\":\"ms-python.vscode-pylance\",\"uuid\":\"364d2426-116a-433a-a5d8-a5098dc3afbd\"},\"displayName\":\"Pylance\"},{\"identifier\":{\"id\":\"ms-vscode.cpptools\",\"uuid\":\"690b692e-e8a9-493f-b802-8089d50ac1b2\"},\"displayName\":\"C/C++\"},{\"identifier\":{\"id\":\"pkief.material-icon-theme\",\"uuid\":\"5db78037-f674-459f-a236-db622c427c5b\"},\"displayName\":\"Material Icon Theme\"},{\"identifier\":{\"id\":\"shardulm94.trailing-spaces\",\"uuid\":\"6ad45f5a-09ec-44e5-b363-867ddc1ec674\"},\"displayName\":\"Trailing Spaces\"},{\"identifier\":{\"id\":\"shd101wyy.markdown-preview-enhanced\",\"uuid\":\"3b1db1fc-c7f7-4bd6-9fa4-b499dfa99a8a\"},\"displayName\":\"Markdown Preview Enhanced\"},{\"identifier\":{\"id\":\"usernamehw.errorlens\",\"uuid\":\"9d8c32ab-354c-4daf-a9bf-20b633734435\"},\"displayName\":\"Error Lens\"},{\"identifier\":{\"id\":\"vscode-icons-team.vscode-icons\",\"uuid\":\"9ccc1dd7-7ec4-4a46-bd4f-7d7b8b9d322a\"},\"displayName\":\"vscode-icons\"},{\"identifier\":{\"id\":\"wenfangdu.snippet-generator\",\"uuid\":\"0992b553-4ce0-40cf-b32a-c83dd131f9de\"},\"displayName\":\"Snippet Generator\"}]",
"globalState": "{\"storage\":{\"workbench.panel.markers.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.markers.view\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.output.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.output\\\",\\\"isHidden\\\":false}]\",\"terminal.hidden\":\"[{\\\"id\\\":\\\"terminal\\\",\\\"isHidden\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.panel.repl.view\\\",\\\"isHidden\\\":false,\\\"order\\\":0}]\",\"workbench.explorer.views.state.hidden\":\"[{\\\"id\\\":\\\"outline\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"timeline\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.explorer.openEditorsView\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.explorer.emptyView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"npm\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.explorer.fileView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerContainers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerImages\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerRegistries\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerNetworks\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerVolumes\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"vscode-docker.views.dockerContexts\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"vscode-docker.views.help\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"copilotSidebar.explain\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"copilotSidebar.translate\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"copilotSidebar.toolbox\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"copilotSidebar.generateTests\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"chatgpt.sidebar\\\",\\\"isHidden\\\":false}]\",\"workbench.scm.views.state.hidden\":\"[{\\\"id\\\":\\\"workbench.scm.repositories\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.scm\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.repositories\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"gitlens.views.commits\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.commitDetails\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.fileHistory\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.lineHistory\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"gitlens.views.branches\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.remotes\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.stashes\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.tags\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.worktrees\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.contributors\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"gitlens.views.searchAndCompare\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.scm.sync\\\",\\\"isHidden\\\":false}]\",\"workbench.view.search.state.hidden\":\"[{\\\"id\\\":\\\"workbench.view.search\\\",\\\"isHidden\\\":false}]\",\"workbench.activity.pinnedViewlets2\":\"[{\\\"id\\\":\\\"workbench.view.search\\\",\\\"pinned\\\":false,\\\"visible\\\":true,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.view.explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.view.scm\\\",\\\"pinned\\\":false,\\\"visible\\\":true,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.view.debug\\\",\\\"pinned\\\":false,\\\"visible\\\":true,\\\"order\\\":3},{\\\"id\\\":\\\"workbench.view.remote\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.extension.test\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.view.extension.references-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":7},{\\\"id\\\":\\\"workbench.view.extension.tabnine\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":12},{\\\"id\\\":\\\"workbench.panel.chatSidebar\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":100},{\\\"id\\\":\\\"workbench.view.extension.cph-judge-view-container\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.copilot-sidebar-webview\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":9},{\\\"id\\\":\\\"workbench.view.extension.cmake-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":12},{\\\"id\\\":\\\"workbench.view.extension.cmake__viewContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":12},{\\\"id\\\":\\\"workbench.view.extension.bookmarks\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":8},{\\\"id\\\":\\\"workbench.view.extension.code-time-sidebar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":13},{\\\"id\\\":\\\"workbench.view.extension.dockerView\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.view.extension.tabnine-access\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":15},{\\\"id\\\":\\\"workbench.view.extension.gitlens\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":12},{\\\"id\\\":\\\"workbench.view.extensions\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.panel.chatSidebar.copilot\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":100},{\\\"id\\\":\\\"workbench.view.sync\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.view.editSessions\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"userDataProfiles\\\",\\\"pinned\\\":true,\\\"visible\\\":false}]\",\"workbench.panel.pinnedPanels\":\"[{\\\"id\\\":\\\"workbench.panel.markers\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.panel.output\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.views.service.panel.17827b40-7980-41bf-8535-94638f93a3a1\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.panel.repl\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.panel.testResults\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"terminal\\\",\\\"pinned\\\":true,\\\"visible\\\":true,\\\"order\\\":3},{\\\"id\\\":\\\"~remote.forwardedPortsContainer\\\",\\\"pinned\\\":false,\\\"visible\\\":true,\\\"order\\\":5},{\\\"id\\\":\\\"workbench.view.extension.gitlensPanel\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.panel.comments\\\",\\\"pinned\\\":false,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"refactorPreview\\\",\\\"pinned\\\":true,\\\"visible\\\":false}]\",\"workbench.view.debug.state.hidden\":\"[{\\\"id\\\":\\\"workbench.debug.welcome\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.debug.variablesView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.debug.watchExpressionsView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.debug.callStackView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.debug.loadedScriptsView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.debug.breakPointsView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"jsBrowserBreakpoints\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"jsExcludedCallers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"CppSshTargetsView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"lldb.loadedModules\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"lldb.excludedCallers\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.repl.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.repl.view\\\",\\\"isHidden\\\":false}]\",\"colorThemeData\":\"{\\\"id\\\":\\\"vs-dark monokai-theme-monokai-pro-vscode-themes-Monokai-Pro--Filter-Spectrum--json\\\",\\\"label\\\":\\\"Monokai Pro (Filter Spectrum)\\\",\\\"settingsId\\\":\\\"Monokai Pro (Filter Spectrum)\\\",\\\"themeTokenColors\\\":[{\\\"settings\\\":{\\\"name\\\":\\\"Comments and overrides inside comments\\\",\\\"fontStyle\\\":\\\"italic\\\",\\\"foreground\\\":\\\"#69676c\\\"},\\\"scope\\\":[\\\"comment\\\",\\\"comment keyword\\\",\\\"comment markup.underline.link\\\",\\\"comment string\\\",\\\"comment punctuation.definition\\\",\\\"comment punctuation\\\",\\\"comment text\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"JSDoc storage type\\\",\\\"foreground\\\":\\\"#69676c\\\"},\\\"scope\\\":\\\"comment storage.type\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"JSDoc entity name\\\",\\\"foreground\\\":\\\"#bab6c0\\\"},\\\"scope\\\":\\\"comment entity.name.type\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"JSDoc variable\\\",\\\"foreground\\\":\\\"#bab6c0\\\"},\\\"scope\\\":[\\\"comment variable\\\",\\\"comment variable.other\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"PHPDoc keyword\\\",\\\"foreground\\\":\\\"#bab6c0\\\"},\\\"scope\\\":[\\\"comment keyword\\\",\\\"comment entity.name.tag\\\",\\\"entity.name.tag.documentation\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Comment TODO / FIXME (at least in VSCode Python)\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"comment keyword.codetag.notation\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Git status remote\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"comment.git-status.header.remote\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Git status local\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"comment.git-status.header.local\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Git status remote\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"comment.other.git-status.head\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Docstring\\\",\\\"foreground\\\":\\\"#69676c\\\"},\\\"scope\\\":[\\\"string.quoted.docstring\\\",\\\"string.quoted.docstring punctuation.definition\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Constant\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"constant\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constant\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"constant.other\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constant\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"constant.other.caps\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Placeholders in C\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":\\\"constant.other.placeholder.c\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constant as property\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"constant.other.property\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constant in latex\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"constant.other.citation.latex\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constant as color (in css / sass)\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"constant.other.color\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constant as character class escape (e.g. in regex)\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"constant.other.character-class.escape\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constant as key (e.g. in puppet manifests)\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"constant.other.key\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constant as symbol (e.g. in ruby)\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":\\\"constant.other.symbol\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constants in elm\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"constant.other.elm\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Number\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"constant.numeric\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constant\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"constant.language\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Character escape\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"constant.character.escape\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Search result line numbers\\\",\\\"foreground\\\":\\\"#525053\\\"},\\\"scope\\\":\\\"constant.numeric.line-number.find-in-files\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Search result matched line numbes\\\",\\\"foreground\\\":\\\"#fce566\\\"},\\\"scope\\\":\\\"constant.numeric.line-number.match.find-in-files\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Sections\\\",\\\"foreground\\\":\\\"#fce566\\\"},\\\"scope\\\":\\\"entity.name.section\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Functions\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":[\\\"entity.name.function\\\",\\\"entity.name.function.templated\\\",\\\"entity.name.function.member.static\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Class template\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":[\\\"entity.name.type.class.templated\\\",\\\"entity.name.type.class.generic\\\",\\\"entity.name.type.namespace\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"label\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"entity.name.label\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Macros\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"entity.name.function.preprocessor\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Entity name\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":\\\"entity.name\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Class name\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"entity.name.class\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constant name\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"entity.name.constant\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Namespace\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"entity.name.namespace\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Inherited class\\\",\\\"fontStyle\\\":\\\"italic\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"entity.other.inherited-class\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Function name\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":\\\"entity.name.function\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Tag name\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"entity.name.tag\\\",\\\"entity.name.tag.js.jsx support.class.component.js.jsx\\\",\\\"entity.name.tag support.class.component\\\",\\\"source.vue support.class.component\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Operator\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"entity.name.function.operator\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Operator\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":[\\\"meta.brackets entity.name.function.operator\\\",\\\"punctuation.separator entity.name.function.operator\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Entity name type\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":[\\\"entity.name.type\\\",\\\"entity.name.type.class.reference\\\",\\\"entity.name.type.class.value\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Tag attribute\\\",\\\"fontStyle\\\":\\\"italic\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"entity.other.attribute-name\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"CSS class\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":[\\\"entity.other.attribute-name.class.css\\\",\\\"entity.other.attribute-name.parent-selector-suffix.css\\\",\\\"entity.other.attribute-name.parent-selector-suffix.css punctuation.definition.entity.css\\\",\\\"entity.other.attribute-name.css\\\",\\\"entity.other.animation-name.css\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"CSS id\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":\\\"entity.other.attribute-name.id.css\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"CSS pseudo class\\\",\\\"fontStyle\\\":\\\"italic\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":[\\\"entity.other.attribute-name.pseudo-class.css\\\",\\\"entity.other.pseudo-class.css\\\",\\\"entity.other.pseudo-element.css\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Function names / calls\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":[\\\"entity.name.function\\\",\\\"support.function\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"git status commit hex\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"entity.other.git-status.hex\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"jinja delimiters\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":\\\"entity.other.jinja2.delimiter\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"custom literal\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"entity.name.operator.custom-literal\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"custom literal string\\\",\\\"foreground\\\":\\\"#fce566\\\"},\\\"scope\\\":\\\"entity.name.operator.custom-literal.string\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"custom literal number\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"entity.name.operator.custom-literal.number\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"rust specific\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"entity.name.type.rust\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"rust specific\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"entity.name.lifetime.rust\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Invalid\\\",\\\"foreground\\\":\\\"#fc618d\\\",\\\"fontStyle\\\":\\\"italic underline\\\"},\\\"scope\\\":\\\"invalid\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Invalid deprecated\\\",\\\"foreground\\\":\\\"#fd9353\\\",\\\"fontStyle\\\":\\\"italic underline\\\"},\\\"scope\\\":\\\"invalid.deprecated\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Keyword\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"keyword\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Control keywords examples include if, try, end and while. Some syntaxes prefer to mark if and else with the conditional variant. The import variant is often used in appropriate situations.\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"keyword.control\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"keyword control directive\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"keyword.control.directive\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Operator\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"keyword.operator\\\",\\\"keyword.operator.member\\\",\\\"keyword.operator.new\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Substitution string\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":\\\"keyword.other.substitution\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Template literal begin / end\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"keyword.other.template.begin\\\",\\\"keyword.other.template.end\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"RestructuredText heading, table markup\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":[\\\"keyword.operator.heading.restructuredtext\\\",\\\"keyword.operator.table.row.restructuredtext keyword.operator.table.data.restructuredtext\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"elm parenthesis\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":\\\"keyword.other.parenthesis.elm\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"rust specific\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":[\\\"keyword.other.fn.rust\\\",\\\"keyword.other.rust\\\",\\\"keyword.other.unsafe.rust\\\",\\\"keyword.other.where.rust\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"rust specific\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"keyword.control.rust\\\",\\\"keyword.operator.misc.rust\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"ruby specific\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"keyword.declaration.class.ruby\\\",\\\"keyword.declaration.function.ruby\\\",\\\"keyword.declaration.namespace.ruby\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Italic\\\",\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"markup.italic\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Bold\\\",\\\"fontStyle\\\":\\\"bold\\\"},\\\"scope\\\":\\\"markup.bold\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Heading\\\",\\\"foreground\\\":\\\"#fce566\\\"},\\\"scope\\\":\\\"markup.heading\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Raw\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":\\\"markup.raw\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Underline\\\",\\\"fontStyle\\\":\\\"underline\\\"},\\\"scope\\\":\\\"markup.underline\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Link\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":\\\"markup.underline.link\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Diff inserted\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":[\\\"markup.inserted\\\",\\\"markup.inserted punctuation.definition.inserted\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Diff deleted\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"markup.deleted\\\",\\\"markup.deleted punctuation.definition.deleted\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Diff changed\\\",\\\"foreground\\\":\\\"#fce566\\\"},\\\"scope\\\":[\\\"markup.changed\\\",\\\"markup.changed punctuation.definition.changed\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Diff ignored\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":[\\\"markup.ignored\\\",\\\"markup.ignored punctuation.definition.ignored\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Diff untracked\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":\\\"markup.untracked\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Markup quote\\\",\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"markup.quote\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Braces, delimiters\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":[\\\"meta.brace.round\\\",\\\"meta.brace.square\\\",\\\"meta.brace.curly\\\",\\\"meta.delimiter.comma.js\\\",\\\"meta.function-call.without-arguments.js\\\",\\\"meta.function-call.method.without-arguments.js\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Function call (vs)\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":[\\\"meta.function-call.generic.python\\\",\\\"support.function.builtin.python\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Function arguments (vs)\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"meta.function-call.python meta.function-call.arguments.python\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Constructor (new MyClass())\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":\\\"meta.instance.constructor\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Class string name (i.e. in html attributes)\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":[\\\"meta.attribute-with-value.class string\\\",\\\"meta.attribute.class.html string\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"ID string name (i.e. in html attributes)\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":[\\\"meta.attribute-with-value.id string\\\",\\\"meta.attribute.id.html string\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"JSON keys\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"source.json meta.mapping.key string\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"YAML keys\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"source.yaml meta.mapping.key string\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Object members\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"meta.object.member\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"SCSS Variable\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":\\\"meta.property-list.css variable.other\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Preprocessor\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":[\\\"entity.name.constant.preprocessor\\\",\\\"meta.preprocessor\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"git diff header\\\",\\\"foreground\\\":\\\"#fce566\\\"},\\\"scope\\\":\\\"meta.diff.git-diff.header\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"rust specific (brackets and certain type names)\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"meta.type_params.rust\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"rust specific (variable.language.rust is 'self' keyword.\\\",\\\"foreground\\\":\\\"#bab6c0\\\"},\\\"scope\\\":[\\\"meta.attribute.rust\\\",\\\"meta.annotation.rust\\\",\\\"variable.language.rust\\\",\\\"variable.annotation.rust\\\",\\\"meta.annotation.rust string\\\",\\\"meta.annotation.rust keyword\\\",\\\"meta.annotation.rust keyword.operator\\\",\\\"meta.attribute.rust string\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"type annotation\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":[\\\"meta.type variable\\\",\\\"meta.type variable.other.readwrite\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Punctuation\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":\\\"punctuation\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Punctuation tags\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":[\\\"punctuation.definition.tag\\\",\\\"punctuation.definition.tag source\\\",\\\"punctuation.definition.group.begin.ruby\\\",\\\"punctuation.definition.group.end.ruby\\\",\\\"punctuation.definition.group.begin.css\\\",\\\"punctuation.definition.group.end.css\\\",\\\"punctuation.definition.string.end.html source.css\\\",\\\"punctuation.definition.block\\\",\\\"punctuation.definition.parameters.begin\\\",\\\"punctuation.definition.parameters.end\\\",\\\"punctuation.separator.parameter\\\",\\\"punctuation.accessor\\\",\\\"punctuation.terminator\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Group (i.e. in regex)\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"punctuation.definition.group\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Comment start / end\\\",\\\"foreground\\\":\\\"#69676c\\\"},\\\"scope\\\":\\\"punctuation.definition.comment\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Variable indicator (i.e. in php or in include directives in sass)\\\",\\\"foreground\\\":\\\"#bab6c0\\\"},\\\"scope\\\":[\\\"punctuation.definition.variable\\\",\\\"punctuation.definition.keyword.scss\\\",\\\"punctuation.definition.entity.css\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Punctuation section embedded (i.e. ?php blocks in html)\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":[\\\"punctuation.section.embedded\\\",\\\"punctuation.section.embedded entity.name.tag\\\",\\\"punctuation.section.embedded constant.other\\\",\\\"punctuation.section.embedded source\\\",\\\"punctuation.section.embedded.begin\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Punctuation template string (`example`)\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"punctuation.template-string.element.begin\\\",\\\"punctuation.template-string.element.end\\\",\\\"punctuation.definition.string.template.begin\\\",\\\"punctuation.definition.string.template.end\\\",\\\"string.quoted.template punctuation.definition.string.begin\\\",\\\"string.quoted.template punctuation.definition.string.end\\\",\\\"punctuation.definition.template-expression.begin\\\",\\\"punctuation.definition.template-expression.end\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Punctuation hard line break in Markdown\\\",\\\"background\\\":\\\"#948ae3\\\"},\\\"scope\\\":[\\\"meta.paragraph.markdown meta.dummy.line-break\\\",\\\"meta.paragraph.markdown meta.hard-line-break.markdown\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Punctuation in markdown links\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":\\\"markup.underline.link punctuation\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Meta braces\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":[\\\"meta.brace.round\\\",\\\"meta.brace.square\\\",\\\"keyword.operator.type.annotation\\\",\\\"meta.type storage.modifier.array\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"region red color\\\",\\\"foreground\\\":\\\"#fc618d\\\",\\\"background\\\":\\\"#fc618d59\\\"},\\\"scope\\\":\\\"region.redish\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"region orange color\\\",\\\"foreground\\\":\\\"#fd9353\\\",\\\"background\\\":\\\"#fd935359\\\"},\\\"scope\\\":\\\"region.orangish\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"region yellow color\\\",\\\"foreground\\\":\\\"#fce566\\\",\\\"background\\\":\\\"#fce56659\\\"},\\\"scope\\\":\\\"region.yellowish\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"region green color\\\",\\\"foreground\\\":\\\"#7bd88f\\\",\\\"background\\\":\\\"#7bd88f59\\\"},\\\"scope\\\":\\\"region.greenish\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"region blue color\\\",\\\"foreground\\\":\\\"#5ad4e6\\\",\\\"background\\\":\\\"#5ad4e659\\\"},\\\"scope\\\":\\\"region.bluish\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"region purple color\\\",\\\"foreground\\\":\\\"#948ae3\\\",\\\"background\\\":\\\"#948ae359\\\"},\\\"scope\\\":\\\"region.purplish\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"region pink color\\\",\\\"foreground\\\":\\\"#fc618d\\\",\\\"background\\\":\\\"#fc618d59\\\"},\\\"scope\\\":\\\"region.pinkish\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"White for ST3 for non-colorized scheme\\\",\\\"foreground\\\":\\\"#FFFFFF\\\"},\\\"scope\\\":\\\"region.whitish\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"source\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"source\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"SASS, SCSS default\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":[\\\"source.scss\\\",\\\"source.sass\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"SASS, SCSS and LESS variables\\\",\\\"fontStyle\\\":\\\"italic\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":[\\\"source.sass variable.other\\\",\\\"source.sass variable.sass\\\",\\\"source.scss variable.other\\\",\\\"source.scss variable.scss\\\",\\\"source.scss variable.sass\\\",\\\"source.css variable.other\\\",\\\"source.css variable.scss\\\",\\\"source.less variable.other\\\",\\\"source.less variable.other.less\\\",\\\"source.less variable.declaration.less\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"git\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"source.git-show.commit.sha\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"git\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":[\\\"source.git-show.author\\\",\\\"source.git-show.date\\\",\\\"source.git-diff.command\\\",\\\"source.git-diff.command meta.diff.git-diff.header.from-file\\\",\\\"source.git-diff.command meta.diff.git-diff.header.to-file\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"git diff header hash\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":[\\\"source.git-show meta.diff.git-diff.header.extended.index.from-sha\\\",\\\"source.git-show meta.diff.git-diff.header.extended.index.to-sha\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"git diff header range\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":\\\"source.git-show meta.diff.range.unified\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"git diff header files\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":[\\\"source.git-show meta.diff.header.from-file\\\",\\\"source.git-show meta.diff.header.to-file\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Storage\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"storage\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Types and definition / declaration keywords should use the following scope. Examples include int, bool, char, func, function, class and def. Depending on the language and semantics, const may be this or storage.modifier.\\\",\\\"fontStyle\\\":\\\"italic\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"storage.type\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Extends\\\",\\\"fontStyle\\\":\\\"normal\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"storage.type.extends\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Fat arrow function\\\",\\\"fontStyle\\\":\\\"normal\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"storage.type.function.arrow\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Keywords that affect the storage of a variable, function or data structure should use the following scope. Examples include static, inline, const, public and private.\\\",\\\"fontStyle\\\":\\\"italic\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"storage.modifier\\\",\\\"storage.type.modifier\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"refs (Restructured text)\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"storage.class.restructuredtext.ref\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"rust specific\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"storage.modifier.visibility.rust\\\",\\\"storage.modifier.lifetime.rust\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"rust specific\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":[\\\"storage.modifier.const.rust\\\",\\\"storage.modifier.dyn.rust\\\",\\\"storage.modifier.mut.rust\\\",\\\"storage.modifier.static.rust\\\",\\\"storage.type.rust\\\",\\\"storage.type.core.rust\\\",\\\"storage.class.std.rust\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"rust specific (adjust blue to red)\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"storage.type.rust\\\",\\\"storage.modifier.const.rust\\\",\\\"storage.modifier.dyn.rust\\\",\\\"storage.modifier.mut.rust\\\",\\\"storage.modifier.static.rust\\\",\\\"keyword.other.rust\\\",\\\"keyword.other.where.rust\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"imported Java libraries\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"storage.modifier.import.java\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"String\\\",\\\"foreground\\\":\\\"#fce566\\\"},\\\"scope\\\":\\\"string\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"String label\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"string.unquoted.label\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Source in template string\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"string source\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Embedded punctuation begin / end in template string\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":[\\\"string source punctuation.section.embedded\\\",\\\"string punctuation.definition.string source\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"link title\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"string.other.link.title\\\",\\\"string.other.link.description\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"link description\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"string.other.link.description.title\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"String regexp begin / end\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":[\\\"string.regexp punctuation.definition.string.begin\\\",\\\"string.regexp punctuation.definition.string.end\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"refs (Restructured text)\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":[\\\"string.other.ref\\\",\\\"string.other.restructuredtext.ref\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"git key in git status help text\\\",\\\"foreground\\\":\\\"#bab6c0\\\"},\\\"scope\\\":\\\"string.other.git-status.help.key\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"git status remote\\\",\\\"foreground\\\":\\\"#fc618d\\\"},\\\"scope\\\":\\\"string.other.git-status.remote\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Library constant\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"support.constant\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Handlebars start / end\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":\\\"support.constant.handlebars\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"vendor prefix\\\",\\\"foreground\\\":\\\"#bab6c0\\\"},\\\"scope\\\":\\\"support.type.vendor-prefix.css\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Function name\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":\\\"support.function\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"function brackets, comma's\\\",\\\"foreground\\\":\\\"#8b888f\\\"},\\\"scope\\\":\\\"support.function.delimiter.elm\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Library type\\\",\\\"fontStyle\\\":\\\"italic\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":[\\\"support.type\\\",\\\"entity.name.type.object.console\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Support variables\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":[\\\"support.variable\\\",\\\"support.variable.property\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Library type property, JSON keys\\\",\\\"fontStyle\\\":\\\"normal\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"support.type.property-name\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Library class\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"support.class\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"rust specific\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"support.constant.core.rust\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"comment support\\\",\\\"foreground\\\":\\\"#69676c\\\"},\\\"scope\\\":[\\\"comment support\\\",\\\"comment support.class\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"text\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"text\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Search result\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"text.find-in-files\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Variable\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":[\\\"variable\\\",\\\"variable.other\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Function arguments\\\",\\\"fontStyle\\\":\\\"italic\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":[\\\"variable.parameter\\\",\\\"parameters variable.function\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Reserved variable names that are specified by the language, such as this, self, super, arguments. Also in function arguments (e.g. like in Python)\\\",\\\"fontStyle\\\":\\\"italic\\\",\\\"foreground\\\":\\\"#bab6c0\\\"},\\\"scope\\\":[\\\"variable.language\\\",\\\"variable.parameter.function.language.special.self.python\\\",\\\"variable.parameter.function.language.special.cls.python\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Reserved variable names: 'arguments'\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"variable.language.arguments\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Library function\\\",\\\"foreground\\\":\\\"#5ad4e6\\\"},\\\"scope\\\":\\\"variable.other.class\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Immutable variables, often via a const modifier, should receive the following scope. Depending on the language and semantics, entity.name.constant may be a better choice.\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"variable.other.constant\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"read/write variables\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"variable.other.readwrite\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Fields, properties, members and attributes of a class or other data structure should use:\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":\\\"variable.other.member\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Enum member\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":\\\"variable.other.enummember\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Variable property\\\",\\\"foreground\\\":\\\"#f7f1ff\\\"},\\\"scope\\\":[\\\"variable.other.property\\\",\\\"variable.other.property.static\\\",\\\"variable.other.event\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"Function and method names should be scoped using the following, but only when they are being invoked. When defined, they should use entity.name.function.\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":\\\"variable.function\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Substitution (restructured text)\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":\\\"variable.other.substitution\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"Ruby instance variables\\\",\\\"foreground\\\":\\\"#948ae3\\\"},\\\"scope\\\":[\\\"source.ruby variable.other.readwrite.instance.ruby\\\",\\\"source.ruby variable.other.readwrite.class.ruby\\\"]},{\\\"settings\\\":{\\\"name\\\":\\\"jinja2 variable block\\\",\\\"foreground\\\":\\\"#7bd88f\\\"},\\\"scope\\\":\\\"source.jinja2 variable.other.jinja2.block\\\"},{\\\"settings\\\":{\\\"name\\\":\\\"jinja2 variable\\\",\\\"foreground\\\":\\\"#fd9353\\\"},\\\"scope\\\":\\\"source.jinja2 variable.other.jinja2\\\"}],\\\"semanticTokenRules\\\":[],\\\"extensionData\\\":{\\\"_extensionId\\\":\\\"monokai.theme-monokai-pro-vscode\\\",\\\"_extensionIsBuiltin\\\":false,\\\"_extensionName\\\":\\\"theme-monokai-pro-vscode\\\",\\\"_extensionPublisher\\\":\\\"monokai\\\"},\\\"colorMap\\\":{\\\"activityBar.activeFocusBorder\\\":\\\"#fce566\\\",\\\"activityBar.background\\\":\\\"#131313\\\",\\\"activityBar.border\\\":\\\"#131313\\\",\\\"activityBar.foreground\\\":\\\"#bab6c0\\\",\\\"activityBar.inactiveForeground\\\":\\\"#525053\\\",\\\"activityBarBadge.background\\\":\\\"#fce566\\\",\\\"activityBarBadge.foreground\\\":\\\"#222222\\\",\\\"badge.background\\\":\\\"#fce566\\\",\\\"badge.foreground\\\":\\\"#222222\\\",\\\"banner.background\\\":\\\"#363537\\\",\\\"banner.foreground\\\":\\\"#bab6c0\\\",\\\"banner.iconForeground\\\":\\\"#bab6c0\\\",\\\"breadcrumb.activeSelectionForeground\\\":\\\"#f7f1ff\\\",\\\"breadcrumb.focusForeground\\\":\\\"#bab6c0\\\",\\\"breadcrumb.foreground\\\":\\\"#8b888f\\\",\\\"breadcrumbPicker.background\\\":\\\"#222222\\\",\\\"button.background\\\":\\\"#363537\\\",\\\"button.foreground\\\":\\\"#bab6c0\\\",\\\"button.hoverBackground\\\":\\\"#525053\\\",\\\"button.secondaryBackground\\\":\\\"#363537\\\",\\\"button.secondaryForeground\\\":\\\"#bab6c0\\\",\\\"button.secondaryHoverBackground\\\":\\\"#525053\\\",\\\"button.separator\\\":\\\"#222222\\\",\\\"charts.blue\\\":\\\"#5ad4e6\\\",\\\"charts.foreground\\\":\\\"#f7f1ff\\\",\\\"charts.green\\\":\\\"#7bd88f\\\",\\\"charts.lines\\\":\\\"#69676c\\\",\\\"charts.orange\\\":\\\"#fd9353\\\",\\\"charts.purple\\\":\\\"#948ae3\\\",\\\"charts.red\\\":\\\"#fc618d\\\",\\\"charts.yellow\\\":\\\"#fce566\\\",\\\"chat.avatarBackground\\\":\\\"#222222\\\",\\\"chat.avatarForeground\\\":\\\"#948ae3\\\",\\\"chat.requestBackground\\\":\\\"#363537\\\",\\\"chat.requestBorder\\\":\\\"#525053\\\",\\\"chat.slashCommandBackground\\\":\\\"#00000000\\\",\\\"chat.slashCommandForeground\\\":\\\"#fce566\\\",\\\"checkbox.background\\\":\\\"#363537\\\",\\\"checkbox.border\\\":\\\"#363537\\\",\\\"checkbox.foreground\\\":\\\"#f7f1ff\\\",\\\"commandCenter.activeBackground\\\":\\\"#222222\\\",\\\"commandCenter.activeForeground\\\":\\\"#bab6c0\\\",\\\"commandCenter.background\\\":\\\"#191919\\\",\\\"commandCenter.border\\\":\\\"#222222\\\",\\\"commandCenter.debuggingBackground\\\":\\\"#191919\\\",\\\"commandCenter.foreground\\\":\\\"#8b888f\\\",\\\"debugConsole.errorForeground\\\":\\\"#fc618d\\\",\\\"debugConsole.infoForeground\\\":\\\"#5ad4e6\\\",\\\"debugConsole.sourceForeground\\\":\\\"#f7f1ff\\\",\\\"debugConsole.warningForeground\\\":\\\"#fd9353\\\",\\\"debugConsoleInputIcon.foreground\\\":\\\"#fce566\\\",\\\"debugExceptionWidget.background\\\":\\\"#363537\\\",\\\"debugExceptionWidget.border\\\":\\\"#222222\\\",\\\"debugIcon.breakpointCurrentStackframeForeground\\\":\\\"#fce566\\\",\\\"debugIcon.breakpointDisabledForeground\\\":\\\"#bab6c0\\\",\\\"debugIcon.breakpointForeground\\\":\\\"#fc618d\\\",\\\"debugIcon.breakpointStackframeForeground\\\":\\\"#f7f1ff\\\",\\\"debugIcon.breakpointUnverifiedForeground\\\":\\\"#fd9353\\\",\\\"debugIcon.continueForeground\\\":\\\"#f7f1ff\\\",\\\"debugIcon.disconnectForeground\\\":\\\"#f7f1ff\\\",\\\"debugIcon.pauseForeground\\\":\\\"#f7f1ff\\\",\\\"debugIcon.restartForeground\\\":\\\"#7bd88f\\\",\\\"debugIcon.startForeground\\\":\\\"#7bd88f\\\",\\\"debugIcon.stepBackForeground\\\":\\\"#f7f1ff\\\",\\\"debugIcon.stepIntoForeground\\\":\\\"#f7f1ff\\\",\\\"debugIcon.stepOutForeground\\\":\\\"#f7f1ff\\\",\\\"debugIcon.stepOverForeground\\\":\\\"#f7f1ff\\\",\\\"debugIcon.stopForeground\\\":\\\"#fc618d\\\",\\\"debugTokenExpression.boolean\\\":\\\"#fd9353\\\",\\\"debugTokenExpression.error\\\":\\\"#fc618d\\\",\\\"debugTokenExpression.name\\\":\\\"#5ad4e6\\\",\\\"debugTokenExpression.number\\\":\\\"#948ae3\\\",\\\"debugTokenExpression.string\\\":\\\"#fce566\\\",\\\"debugTokenExpression.value\\\":\\\"#f7f1ff\\\",\\\"debugToolBar.background\\\":\\\"#363537\\\",\\\"debugView.exceptionLabelBackground\\\":\\\"#fc618d\\\",\\\"debugView.exceptionLabelForeground\\\":\\\"#222222\\\",\\\"debugView.stateLabelBackground\\\":\\\"#7bd88f\\\",\\\"debugView.stateLabelForeground\\\":\\\"#222222\\\",\\\"debugView.valueChangedHighlight\\\":\\\"#fce566\\\",\\\"descriptionForeground\\\":\\\"#8b888f\\\",\\\"diffEditor.diagonalFill\\\":\\\"#363537\\\",\\\"diffEditor.insertedLineBackground\\\":\\\"#7bd88f19\\\",\\\"diffEditor.insertedTextBackground\\\":\\\"#7bd88f19\\\",\\\"diffEditor.move.border\\\":\\\"#ff0000\\\",\\\"diffEditor.moveActive.border\\\":\\\"#ff0000\\\",\\\"diffEditor.removedLineBackground\\\":\\\"#fc618d19\\\",\\\"diffEditor.removedTextBackground\\\":\\\"#fc618d19\\\",\\\"diffEditor.unchangedCodeBackground\\\":\\\"#191919\\\",\\\"diffEditor.unchangedRegionBackground\\\":\\\"#191919\\\",\\\"diffEditor.unchangedRegionForeground\\\":\\\"#bab6c0\\\",\\\"diffEditor.unchangedRegionShadow\\\":\\\"#131313\\\",\\\"diffEditorGutter.insertedLineBackground\\\":\\\"#7bd88f19\\\",\\\"diffEditorGutter.removedLineBackground\\\":\\\"#fc618d19\\\",\\\"diffEditorOverview.insertedForeground\\\":\\\"#7bd88fa5\\\",\\\"diffEditorOverview.removedForeground\\\":\\\"#fc618da5\\\",\\\"dropdown.background\\\":\\\"#222222\\\",\\\"dropdown.border\\\":\\\"#222222\\\",\\\"dropdown.foreground\\\":\\\"#8b888f\\\",\\\"dropdown.listBackground\\\":\\\"#363537\\\",\\\"editor.background\\\":\\\"#222222\\\",\\\"editor.findMatchBackground\\\":\\\"#f7f1ff26\\\",\\\"editor.findMatchBorder\\\":\\\"#fce566\\\",\\\"editor.findMatchHighlightBackground\\\":\\\"#f7f1ff26\\\",\\\"editor.findMatchHighlightBorder\\\":\\\"#00000000\\\",\\\"editor.findRangeHighlightBackground\\\":\\\"#f7f1ff0c\\\",\\\"editor.findRangeHighlightBorder\\\":\\\"#00000000\\\",\\\"editor.focusedStackFrameHighlightBackground\\\":\\\"#bab6c026\\\",\\\"editor.foldBackground\\\":\\\"#f7f1ff0c\\\",\\\"editor.foreground\\\":\\\"#f7f1ff\\\",\\\"editor.hoverHighlightBackground\\\":\\\"#f7f1ff0c\\\",\\\"editor.inactiveSelectionBackground\\\":\\\"#f7f1ff0c\\\",\\\"editor.inlineValuesBackground\\\":\\\"#525053\\\",\\\"editor.inlineValuesForeground\\\":\\\"#bab6c0\\\",\\\"editor.lineHighlightBackground\\\":\\\"#f7f1ff0c\\\",\\\"editor.lineHighlightBorder\\\":\\\"#00000000\\\",\\\"editor.linkedEditingBackground\\\":\\\"#363537\\\",\\\"editor.rangeHighlightBackground\\\":\\\"#363537\\\",\\\"editor.rangeHighlightBorder\\\":\\\"#363537\\\",\\\"editor.selectionBackground\\\":\\\"#bab6c026\\\",\\\"editor.selectionHighlightBackground\\\":\\\"#f7f1ff26\\\",\\\"editor.selectionHighlightBorder\\\":\\\"#00000000\\\",\\\"editor.stackFrameHighlightBackground\\\":\\\"#bab6c026\\\",\\\"editor.wordHighlightBackground\\\":\\\"#f7f1ff26\\\",\\\"editor.wordHighlightBorder\\\":\\\"#00000000\\\",\\\"editor.wordHighlightStrongBackground\\\":\\\"#f7f1ff26\\\",\\\"editor.wordHighlightStrongBorder\\\":\\\"#00000000\\\",\\\"editorBracketHighlight.foreground1\\\":\\\"#fc618d\\\",\\\"editorBracketHighlight.foreground2\\\":\\\"#fd9353\\\",\\\"editorBracketHighlight.foreground3\\\":\\\"#fce566\\\",\\\"editorBracketHighlight.foreground4\\\":\\\"#7bd88f\\\",\\\"editorBracketHighlight.foreground5\\\":\\\"#5ad4e6\\\",\\\"editorBracketHighlight.foreground6\\\":\\\"#948ae3\\\",\\\"editorBracketMatch.background\\\":\\\"#222222\\\",\\\"editorBracketMatch.border\\\":\\\"#69676c\\\",\\\"editorCodeLens.foreground\\\":\\\"#69676c\\\",\\\"editorCursor.background\\\":\\\"#222222\\\",\\\"editorCursor.foreground\\\":\\\"#f7f1ff\\\",\\\"editorError.background\\\":\\\"#00000000\\\",\\\"editorError.border\\\":\\\"#00000000\\\",\\\"editorError.foreground\\\":\\\"#fc618d\\\",\\\"editorGhostText.foreground\\\":\\\"#69676c\\\",\\\"editorGroup.border\\\":\\\"#191919\\\",\\\"editorGroup.dropBackground\\\":\\\"#191919bf\\\",\\\"editorGroup.emptyBackground\\\":\\\"#131313\\\",\\\"editorGroup.focusedEmptyBorder\\\":\\\"#191919\\\",\\\"editorGroupHeader.noTabsBackground\\\":\\\"#222222\\\",\\\"editorGroupHeader.tabsBackground\\\":\\\"#222222\\\",\\\"editorGroupHeader.tabsBorder\\\":\\\"#222222\\\",\\\"editorGutter.addedBackground\\\":\\\"#7bd88f\\\",\\\"editorGutter.background\\\":\\\"#222222\\\",\\\"editorGutter.deletedBackground\\\":\\\"#fc618d\\\",\\\"editorGutter.foldingControlForeground\\\":\\\"#bab6c0\\\",\\\"editorGutter.modifiedBackground\\\":\\\"#fd9353\\\",\\\"editorHint.border\\\":\\\"#222222\\\",\\\"editorHint.foreground\\\":\\\"#948ae3\\\",\\\"editorHoverWidget.background\\\":\\\"#363537\\\",\\\"editorHoverWidget.border\\\":\\\"#222222\\\",\\\"editorIndentGuide.background\\\":\\\"#363537\\\",\\\"editorInfo.background\\\":\\\"#00000000\\\",\\\"editorInfo.border\\\":\\\"#222222\\\",\\\"editorInfo.foreground\\\":\\\"#5ad4e6\\\",\\\"editorInlayHint.background\\\":\\\"#363537\\\",\\\"editorInlayHint.foreground\\\":\\\"#8b888f\\\",\\\"editorLightBulb.foreground\\\":\\\"#fce566\\\",\\\"editorLightBulbAi.foreground\\\":\\\"#fce566\\\",\\\"editorLightBulbAutoFix.foreground\\\":\\\"#7bd88f\\\",\\\"editorLineNumber.activeForeground\\\":\\\"#bab6c0\\\",\\\"editorLineNumber.foreground\\\":\\\"#525053\\\",\\\"editorLink.activeForeground\\\":\\\"#5ad4e6\\\",\\\"editorMarkerNavigation.background\\\":\\\"#363537\\\",\\\"editorMarkerNavigationError.background\\\":\\\"#fc618d\\\",\\\"editorMarkerNavigationInfo.background\\\":\\\"#5ad4e6\\\",\\\"editorMarkerNavigationWarning.background\\\":\\\"#fd9353\\\",\\\"editorOverviewRuler.addedForeground\\\":\\\"#7bd88f\\\",\\\"editorOverviewRuler.border\\\":\\\"#222222\\\",\\\"editorOverviewRuler.currentContentForeground\\\":\\\"#363537\\\",\\\"editorOverviewRuler.deletedForeground\\\":\\\"#fc618d\\\",\\\"editorOverviewRuler.errorForeground\\\":\\\"#fc618d\\\",\\\"editorOverviewRuler.findMatchForeground\\\":\\\"#f7f1ff26\\\",\\\"editorOverviewRuler.incomingContentForeground\\\":\\\"#363537\\\",\\\"editorOverviewRuler.infoForeground\\\":\\\"#5ad4e6\\\",\\\"editorOverviewRuler.modifiedForeground\\\":\\\"#fd9353\\\",\\\"editorOverviewRuler.rangeHighlightForeground\\\":\\\"#f7f1ff26\\\",\\\"editorOverviewRuler.selectionHighlightForeground\\\":\\\"#f7f1ff26\\\",\\\"editorOverviewRuler.warningForeground\\\":\\\"#fd9353\\\",\\\"editorOverviewRuler.wordHighlightForeground\\\":\\\"#f7f1ff26\\\",\\\"editorOverviewRuler.wordHighlightStrongForeground\\\":\\\"#f7f1ff26\\\",\\\"editorPane.background\\\":\\\"#222222\\\",\\\"editorRuler.foreground\\\":\\\"#525053\\\",\\\"editorStickyScroll.background\\\":\\\"#222222\\\",\\\"editorStickyScroll.border\\\":\\\"#363537\\\",\\\"editorStickyScroll.shadow\\\":\\\"#222222\\\",\\\"editorStickyScrollHover.background\\\":\\\"#f7f1ff0c\\\",\\\"editorSuggestWidget.background\\\":\\\"#363537\\\",\\\"editorSuggestWidget.border\\\":\\\"#363537\\\",\\\"editorSuggestWidget.foreground\\\":\\\"#bab6c0\\\",\\\"editorSuggestWidget.highlightForeground\\\":\\\"#f7f1ff\\\",\\\"editorSuggestWidget.selectedBackground\\\":\\\"#69676c\\\",\\\"editorUnnecessaryCode.opacity\\\":\\\"#000000a5\\\",\\\"editorWarning.background\\\":\\\"#00000000\\\",\\\"editorWarning.border\\\":\\\"#00000000\\\",\\\"editorWarning.foreground\\\":\\\"#fd9353\\\",\\\"editorWhitespace.foreground\\\":\\\"#525053\\\",\\\"editorWidget.background\\\":\\\"#363537\\\",\\\"editorWidget.border\\\":\\\"#363537\\\",\\\"errorForeground\\\":\\\"#fc618d\\\",\\\"extensionBadge.remoteForeground\\\":\\\"#7bd88f\\\",\\\"extensionButton.prominentBackground\\\":\\\"#363537\\\",\\\"extensionButton.prominentForeground\\\":\\\"#f7f1ff\\\",\\\"extensionButton.prominentHoverBackground\\\":\\\"#525053\\\",\\\"extensionIcon.preReleaseForeground\\\":\\\"#948ae3\\\",\\\"extensionIcon.sponsorForeground\\\":\\\"#5ad4e6\\\",\\\"extensionIcon.starForeground\\\":\\\"#fce566\\\",\\\"extensionIcon.verifiedForeground\\\":\\\"#7bd88f\\\",\\\"focusBorder\\\":\\\"#69676c\\\",\\\"foreground\\\":\\\"#f7f1ff\\\",\\\"gitDecoration.addedResourceForeground\\\":\\\"#7bd88f\\\",\\\"gitDecoration.conflictingResourceForeground\\\":\\\"#fd9353\\\",\\\"gitDecoration.deletedResourceForeground\\\":\\\"#fc618d\\\",\\\"gitDecoration.ignoredResourceForeground\\\":\\\"#525053\\\",\\\"gitDecoration.modifiedResourceForeground\\\":\\\"#fce566\\\",\\\"gitDecoration.stageDeletedResourceForeground\\\":\\\"#fc618d\\\",\\\"gitDecoration.stageModifiedResourceForeground\\\":\\\"#fce566\\\",\\\"gitDecoration.untrackedResourceForeground\\\":\\\"#bab6c0\\\",\\\"icon.foreground\\\":\\\"#8b888f\\\",\\\"inlineChat.background\\\":\\\"#222222\\\",\\\"inlineChat.border\\\":\\\"#191919\\\",\\\"inlineChat.shadow\\\":\\\"#131313\\\",\\\"inlineChatDiff.inserted\\\":\\\"#7bd88f19\\\",\\\"inlineChatDiff.removed\\\":\\\"#7bd88f19\\\",\\\"input.background\\\":\\\"#363537\\\",\\\"input.border\\\":\\\"#363537\\\",\\\"input.foreground\\\":\\\"#f7f1ff\\\",\\\"input.placeholderForeground\\\":\\\"#69676c\\\",\\\"inputOption.activeBackground\\\":\\\"#525053\\\",\\\"inputOption.activeBorder\\\":\\\"#525053\\\",\\\"inputOption.activeForeground\\\":\\\"#f7f1ff\\\",\\\"inputOption.hoverBackground\\\":\\\"#525053\\\",\\\"inputValidation.errorBackground\\\":\\\"#363537\\\",\\\"inputValidation.errorBorder\\\":\\\"#fc618d\\\",\\\"inputValidation.errorForeground\\\":\\\"#fc618d\\\",\\\"inputValidation.infoBackground\\\":\\\"#363537\\\",\\\"inputValidation.infoBorder\\\":\\\"#5ad4e6\\\",\\\"inputValidation.infoForeground\\\":\\\"#5ad4e6\\\",\\\"inputValidation.warningBackground\\\":\\\"#363537\\\",\\\"inputValidation.warningBorder\\\":\\\"#fd9353\\\",\\\"inputValidation.warningForeground\\\":\\\"#fd9353\\\",\\\"interactive.activeCodeBorder\\\":\\\"#69676c\\\",\\\"interactive.inactiveCodeBorder\\\":\\\"#363537\\\",\\\"keybindingLabel.background\\\":\\\"#525053\\\",\\\"keybindingLabel.border\\\":\\\"#525053\\\",\\\"keybindingLabel.bottomBorder\\\":\\\"#363537\\\",\\\"keybindingLabel.foreground\\\":\\\"#bab6c0\\\",\\\"list.activeSelectionBackground\\\":\\\"#f7f1ff0c\\\",\\\"list.activeSelectionForeground\\\":\\\"#fce566\\\",\\\"list.dropBackground\\\":\\\"#191919bf\\\",\\\"list.errorForeground\\\":\\\"#fc618d\\\",\\\"list.focusBackground\\\":\\\"#222222\\\",\\\"list.focusForeground\\\":\\\"#f7f1ff\\\",\\\"list.highlightForeground\\\":\\\"#f7f1ff\\\",\\\"list.hoverBackground\\\":\\\"#f7f1ff0c\\\",\\\"list.hoverForeground\\\":\\\"#f7f1ff\\\",\\\"list.inactiveFocusBackground\\\":\\\"#222222\\\",\\\"list.inactiveSelectionBackground\\\":\\\"#bab6c00c\\\",\\\"list.inactiveSelectionForeground\\\":\\\"#fce566\\\",\\\"list.invalidItemForeground\\\":\\\"#fc618d\\\",\\\"list.warningForeground\\\":\\\"#fd9353\\\",\\\"listFilterWidget.background\\\":\\\"#222222\\\",\\\"listFilterWidget.noMatchesOutline\\\":\\\"#fc618d\\\",\\\"listFilterWidget.outline\\\":\\\"#222222\\\",\\\"listFilterWidget.shadow\\\":\\\"#131313\\\",\\\"menu.background\\\":\\\"#222222\\\",\\\"menu.border\\\":\\\"#191919\\\",\\\"menu.foreground\\\":\\\"#f7f1ff\\\",\\\"menu.selectionForeground\\\":\\\"#fce566\\\",\\\"menu.separatorBackground\\\":\\\"#363537\\\",\\\"menubar.selectionForeground\\\":\\\"#f7f1ff\\\",\\\"merge.border\\\":\\\"#222222\\\",\\\"merge.commonContentBackground\\\":\\\"#f7f1ff19\\\",\\\"merge.commonHeaderBackground\\\":\\\"#f7f1ff26\\\",\\\"merge.currentContentBackground\\\":\\\"#fc618d19\\\",\\\"merge.currentHeaderBackground\\\":\\\"#fc618d26\\\",\\\"merge.incomingContentBackground\\\":\\\"#7bd88f19\\\",\\\"merge.incomingHeaderBackground\\\":\\\"#7bd88f26\\\",\\\"mergeEditor.change.background\\\":\\\"#f7f1ff19\\\",\\\"mergeEditor.change.word.background\\\":\\\"#f7f1ff19\\\",\\\"mergeEditor.conflict.handled.minimapOverViewRuler\\\":\\\"#7bd88f\\\",\\\"mergeEditor.conflict.handledFocused.border\\\":\\\"#7bd88f\\\",\\\"mergeEditor.conflict.handledUnfocused.border\\\":\\\"#7bd88f\\\",\\\"mergeEditor.conflict.unhandled.minimapOverViewRuler\\\":\\\"#fc618d\\\",\\\"mergeEditor.conflict.unhandledFocused.border\\\":\\\"#fc618d\\\",\\\"mergeEditor.conflict.unhandledUnfocused.border\\\":\\\"#fc618d\\\",\\\"minimap.errorHighlight\\\":\\\"#fc618da5\\\",\\\"minimap.findMatchHighlight\\\":\\\"#8b888fa5\\\",\\\"minimap.infoHighlight\\\":\\\"#5ad4e6a5\\\",\\\"minimap.selectionHighlight\\\":\\\"#bab6c026\\\",\\\"minimap.selectionOccurrenceHighlight\\\":\\\"#69676ca5\\\",\\\"minimap.warningHighlight\\\":\\\"#fd9353a5\\\",\\\"minimapGutter.addedBackground\\\":\\\"#7bd88f\\\",\\\"minimapGutter.deletedBackground\\\":\\\"#fc618d\\\",\\\"minimapGutter.modifiedBackground\\\":\\\"#fce566\\\",\\\"notebook.cellBorderColor\\\":\\\"#363537\\\",\\\"notebook.cellEditorBackground\\\":\\\"#1919197f\\\",\\\"notebook.cellInsertionIndicator\\\":\\\"#f7f1ff\\\",\\\"notebook.cellStatusBarItemHoverBackground\\\":\\\"#69676c\\\",\\\"notebook.cellToolbarSeparator\\\":\\\"#363537\\\",\\\"notebook.editorBackground\\\":\\\"#222222\\\",\\\"notebook.focusedEditorBorder\\\":\\\"#69676c\\\",\\\"notebookStatusErrorIcon.foreground\\\":\\\"#fc618d\\\",\\\"notebookStatusRunningIcon.foreground\\\":\\\"#f7f1ff\\\",\\\"notebookStatusSuccessIcon.foreground\\\":\\\"#7bd88f\\\",\\\"notificationCenter.border\\\":\\\"#363537\\\",\\\"notificationCenterHeader.background\\\":\\\"#363537\\\",\\\"notificationCenterHeader.foreground\\\":\\\"#8b888f\\\",\\\"notificationLink.foreground\\\":\\\"#fce566\\\",\\\"notifications.background\\\":\\\"#363537\\\",\\\"notifications.border\\\":\\\"#363537\\\",\\\"notifications.foreground\\\":\\\"#bab6c0\\\",\\\"notificationsErrorIcon.foreground\\\":\\\"#fc618d\\\",\\\"notificationsInfoIcon.foreground\\\":\\\"#5ad4e6\\\",\\\"notificationsWarningIcon.foreground\\\":\\\"#fd9353\\\",\\\"notificationToast.border\\\":\\\"#363537\\\",\\\"panel.background\\\":\\\"#363537\\\",\\\"panel.border\\\":\\\"#222222\\\",\\\"panel.dropBackground\\\":\\\"#191919bf\\\",\\\"panelStickyScroll.background\\\":\\\"#363537\\\",\\\"panelStickyScroll.border\\\":\\\"#ff0000\\\",\\\"panelStickyScroll.shadow\\\":\\\"#363537\\\",\\\"panelTitle.activeBorder\\\":\\\"#fce566\\\",\\\"panelTitle.activeForeground\\\":\\\"#fce566\\\",\\\"panelTitle.inactiveForeground\\\":\\\"#8b888f\\\",\\\"peekView.border\\\":\\\"#222222\\\",\\\"peekViewEditor.background\\\":\\\"#363537\\\",\\\"peekViewEditor.matchHighlightBackground\\\":\\\"#525053\\\",\\\"peekViewEditorGutter.background\\\":\\\"#363537\\\",\\\"peekViewResult.background\\\":\\\"#363537\\\",\\\"peekViewResult.fileForeground\\\":\\\"#8b888f\\\",\\\"peekViewResult.lineForeground\\\":\\\"#8b888f\\\",\\\"peekViewResult.matchHighlightBackground\\\":\\\"#525053\\\",\\\"peekViewResult.selectionBackground\\\":\\\"#363537\\\",\\\"peekViewResult.selectionForeground\\\":\\\"#f7f1ff\\\",\\\"peekViewTitle.background\\\":\\\"#363537\\\",\\\"peekViewTitleDescription.foreground\\\":\\\"#8b888f\\\",\\\"peekViewTitleLabel.foreground\\\":\\\"#f7f1ff\\\",\\\"pickerGroup.border\\\":\\\"#222222\\\",\\\"pickerGroup.foreground\\\":\\\"#525053\\\",\\\"ports.iconRunningProcessForeground\\\":\\\"#7bd88f\\\",\\\"problemsErrorIcon.foreground\\\":\\\"#fc618d\\\",\\\"problemsInfoIcon.foreground\\\":\\\"#5ad4e6\\\",\\\"problemsWarningIcon.foreground\\\":\\\"#fd9353\\\",\\\"profileBadge.background\\\":\\\"#363537\\\",\\\"profileBadge.foreground\\\":\\\"#bab6c0\\\",\\\"progressBar.background\\\":\\\"#69676c\\\",\\\"sash.hoverBorder\\\":\\\"#69676c\\\",\\\"scrollbar.shadow\\\":\\\"#222222\\\",\\\"scrollbarSlider.activeBackground\\\":\\\"#f7f1ff59\\\",\\\"scrollbarSlider.background\\\":\\\"#bab6c026\\\",\\\"scrollbarSlider.hoverBackground\\\":\\\"#f7f1ff26\\\",\\\"selection.background\\\":\\\"#bab6c026\\\",\\\"settings.checkboxBackground\\\":\\\"#363537\\\",\\\"settings.checkboxBorder\\\":\\\"#363537\\\",\\\"settings.checkboxForeground\\\":\\\"#f7f1ff\\\",\\\"settings.dropdownBackground\\\":\\\"#363537\\\",\\\"settings.dropdownBorder\\\":\\\"#363537\\\",\\\"settings.dropdownForeground\\\":\\\"#f7f1ff\\\",\\\"settings.dropdownListBorder\\\":\\\"#8b888f\\\",\\\"settings.headerForeground\\\":\\\"#fce566\\\",\\\"settings.modifiedItemForeground\\\":\\\"#fce566\\\",\\\"settings.modifiedItemIndicator\\\":\\\"#fce566\\\",\\\"settings.numberInputBackground\\\":\\\"#363537\\\",\\\"settings.numberInputBorder\\\":\\\"#363537\\\",\\\"settings.numberInputForeground\\\":\\\"#f7f1ff\\\",\\\"settings.rowHoverBackground\\\":\\\"#69676c0c\\\",\\\"settings.sashBorder\\\":\\\"#363537\\\",\\\"settings.settingsHeaderHoverForeground\\\":\\\"#f7f1ff\\\",\\\"settings.textInputBackground\\\":\\\"#363537\\\",\\\"settings.textInputBorder\\\":\\\"#363537\\\",\\\"settings.textInputForeground\\\":\\\"#f7f1ff\\\",\\\"sideBar.background\\\":\\\"#191919\\\",\\\"sideBar.border\\\":\\\"#131313\\\",\\\"sideBar.dropBackground\\\":\\\"#191919bf\\\",\\\"sideBar.foreground\\\":\\\"#8b888f\\\",\\\"sideBarSectionHeader.background\\\":\\\"#191919\\\",\\\"sideBarSectionHeader.foreground\\\":\\\"#69676c\\\",\\\"sideBarStickyScroll.background\\\":\\\"#191919\\\",\\\"sideBarStickyScroll.border\\\":\\\"#363537\\\",\\\"sideBarStickyScroll.shadow\\\":\\\"#191919\\\",\\\"sideBarTitle.foreground\\\":\\\"#525053\\\",\\\"simpleFindWidget.sashBorder\\\":\\\"#ff0000\\\",\\\"statusBar.background\\\":\\\"#191919\\\",\\\"statusBar.border\\\":\\\"#131313\\\",\\\"statusBar.debuggingBackground\\\":\\\"#69676c\\\",\\\"statusBar.debuggingBorder\\\":\\\"#191919\\\",\\\"statusBar.debuggingForeground\\\":\\\"#f7f1ff\\\",\\\"statusBar.focusBorder\\\":\\\"#363537\\\",\\\"statusBar.foreground\\\":\\\"#69676c\\\",\\\"statusBar.noFolderBackground\\\":\\\"#191919\\\",\\\"statusBar.noFolderBorder\\\":\\\"#131313\\\",\\\"statusBar.noFolderForeground\\\":\\\"#69676c\\\",\\\"statusBarItem.activeBackground\\\":\\\"#222222\\\",\\\"statusBarItem.errorBackground\\\":\\\"#222222\\\",\\\"statusBarItem.errorForeground\\\":\\\"#fc618d\\\",\\\"statusBarItem.focusBorder\\\":\\\"#69676c\\\",\\\"statusBarItem.hoverBackground\\\":\\\"#f7f1ff0c\\\",\\\"statusBarItem.prominentBackground\\\":\\\"#363537\\\",\\\"statusBarItem.offlineBackground\\\":\\\"#ff0000\\\",\\\"statusBarItem.offlineForeground\\\":\\\"#ff0000\\\",\\\"statusBarItem.prominentHoverBackground\\\":\\\"#363537\\\",\\\"statusBarItem.remoteBackground\\\":\\\"#191919\\\",\\\"statusBarItem.remoteForeground\\\":\\\"#7bd88f\\\",\\\"statusBarItem.warningBackground\\\":\\\"#222222\\\",\\\"statusBarItem.warningForeground\\\":\\\"#fd9353\\\",\\\"symbolIcon.arrayForeground\\\":\\\"#fc618d\\\",\\\"symbolIcon.booleanForeground\\\":\\\"#fc618d\\\",\\\"symbolIcon.classForeground\\\":\\\"#5ad4e6\\\",\\\"symbolIcon.colorForeground\\\":\\\"#948ae3\\\",\\\"symbolIcon.constantForeground\\\":\\\"#948ae3\\\",\\\"symbolIcon.constructorForeground\\\":\\\"#7bd88f\\\",\\\"symbolIcon.enumeratorForeground\\\":\\\"#fd9353\\\",\\\"symbolIcon.enumeratorMemberForeground\\\":\\\"#fd9353\\\",\\\"symbolIcon.eventForeground\\\":\\\"#fd9353\\\",\\\"symbolIcon.fieldForeground\\\":\\\"#fd9353\\\",\\\"symbolIcon.fileForeground\\\":\\\"#bab6c0\\\",\\\"symbolIcon.folderForeground\\\":\\\"#bab6c0\\\",\\\"symbolIcon.functionForeground\\\":\\\"#7bd88f\\\",\\\"symbolIcon.interfaceForeground\\\":\\\"#5ad4e6\\\",\\\"symbolIcon.keyForeground\\\":\\\"#fd9353\\\",\\\"symbolIcon.keywordForeground\\\":\\\"#fc618d\\\",\\\"symbolIcon.methodForeground\\\":\\\"#7bd88f\\\",\\\"symbolIcon.moduleForeground\\\":\\\"#5ad4e6\\\",\\\"symbolIcon.namespaceForeground\\\":\\\"#5ad4e6\\\",\\\"symbolIcon.nullForeground\\\":\\\"#948ae3\\\",\\\"symbolIcon.numberForeground\\\":\\\"#948ae3\\\",\\\"symbolIcon.objectForeground\\\":\\\"#5ad4e6\\\",\\\"symbolIcon.operatorForeground\\\":\\\"#fc618d\\\",\\\"symbolIcon.packageForeground\\\":\\\"#948ae3\\\",\\\"symbolIcon.propertyForeground\\\":\\\"#fd9353\\\",\\\"symbolIcon.referenceForeground\\\":\\\"#948ae3\\\",\\\"symbolIcon.snippetForeground\\\":\\\"#7bd88f\\\",\\\"symbolIcon.stringForeground\\\":\\\"#fce566\\\",\\\"symbolIcon.structForeground\\\":\\\"#fc618d\\\",\\\"symbolIcon.textForeground\\\":\\\"#fce566\\\",\\\"symbolIcon.typeParameterForeground\\\":\\\"#fd9353\\\",\\\"symbolIcon.unitForeground\\\":\\\"#948ae3\\\",\\\"symbolIcon.variableForeground\\\":\\\"#5ad4e6\\\",\\\"tab.activeBackground\\\":\\\"#222222\\\",\\\"tab.activeBorder\\\":\\\"#fce566\\\",\\\"tab.activeForeground\\\":\\\"#fce566\\\",\\\"tab.activeModifiedBorder\\\":\\\"#525053\\\",\\\"tab.border\\\":\\\"#222222\\\",\\\"tab.hoverBackground\\\":\\\"#222222\\\",\\\"tab.hoverBorder\\\":\\\"#525053\\\",\\\"tab.hoverForeground\\\":\\\"#f7f1ff\\\",\\\"tab.inactiveBackground\\\":\\\"#222222\\\",\\\"tab.inactiveForeground\\\":\\\"#8b888f\\\",\\\"tab.inactiveModifiedBorder\\\":\\\"#525053\\\",\\\"tab.lastPinnedBorder\\\":\\\"#525053\\\",\\\"tab.unfocusedActiveBorder\\\":\\\"#8b888f\\\",\\\"tab.unfocusedActiveForeground\\\":\\\"#bab6c0\\\",\\\"tab.unfocusedActiveModifiedBorder\\\":\\\"#363537\\\",\\\"tab.unfocusedHoverBackground\\\":\\\"#222222\\\",\\\"tab.unfocusedHoverBorder\\\":\\\"#222222\\\",\\\"tab.unfocusedHoverForeground\\\":\\\"#bab6c0\\\",\\\"tab.unfocusedInactiveForeground\\\":\\\"#8b888f\\\",\\\"tab.unfocusedInactiveModifiedBorder\\\":\\\"#363537\\\",\\\"terminal.ansiBlack\\\":\\\"#363537\\\",\\\"terminal.ansiBlue\\\":\\\"#fd9353\\\",\\\"terminal.ansiBrightBlack\\\":\\\"#69676c\\\",\\\"terminal.ansiBrightBlue\\\":\\\"#fd9353\\\",\\\"terminal.ansiBrightCyan\\\":\\\"#5ad4e6\\\",\\\"terminal.ansiBrightGreen\\\":\\\"#7bd88f\\\",\\\"terminal.ansiBrightMagenta\\\":\\\"#948ae3\\\",\\\"terminal.ansiBrightRed\\\":\\\"#fc618d\\\",\\\"terminal.ansiBrightWhite\\\":\\\"#f7f1ff\\\",\\\"terminal.ansiBrightYellow\\\":\\\"#fce566\\\",\\\"terminal.ansiCyan\\\":\\\"#5ad4e6\\\",\\\"terminal.ansiGreen\\\":\\\"#7bd88f\\\",\\\"terminal.ansiMagenta\\\":\\\"#948ae3\\\",\\\"terminal.ansiRed\\\":\\\"#fc618d\\\",\\\"terminal.ansiWhite\\\":\\\"#f7f1ff\\\",\\\"terminal.ansiYellow\\\":\\\"#fce566\\\",\\\"terminal.background\\\":\\\"#363537\\\",\\\"terminal.foreground\\\":\\\"#f7f1ff\\\",\\\"terminal.selectionBackground\\\":\\\"#f7f1ff26\\\",\\\"terminalCommandDecoration.defaultBackground\\\":\\\"#f7f1ff\\\",\\\"terminalCommandDecoration.errorBackground\\\":\\\"#fc618d\\\",\\\"terminalCommandDecoration.successBackground\\\":\\\"#7bd88f\\\",\\\"terminalCursor.background\\\":\\\"#00000000\\\",\\\"terminalCursor.foreground\\\":\\\"#f7f1ff\\\",\\\"testing.iconErrored\\\":\\\"#fc618d\\\",\\\"testing.iconFailed\\\":\\\"#fc618d\\\",\\\"testing.iconPassed\\\":\\\"#7bd88f\\\",\\\"testing.iconQueued\\\":\\\"#f7f1ff\\\",\\\"testing.iconSkipped\\\":\\\"#fd9353\\\",\\\"testing.iconUnset\\\":\\\"#8b888f\\\",\\\"testing.message.error.decorationForeground\\\":\\\"#fc618d\\\",\\\"testing.message.error.lineBackground\\\":\\\"#fc618d19\\\",\\\"testing.message.info.decorationForeground\\\":\\\"#f7f1ff\\\",\\\"testing.message.info.lineBackground\\\":\\\"#f7f1ff19\\\",\\\"testing.runAction\\\":\\\"#fce566\\\",\\\"textBlockQuote.background\\\":\\\"#363537\\\",\\\"textBlockQuote.border\\\":\\\"#363537\\\",\\\"textCodeBlock.background\\\":\\\"#363537\\\",\\\"textLink.activeForeground\\\":\\\"#f7f1ff\\\",\\\"textLink.foreground\\\":\\\"#fce566\\\",\\\"textPreformat.foreground\\\":\\\"#f7f1ff\\\",\\\"textSeparator.foreground\\\":\\\"#69676c\\\",\\\"titleBar.activeBackground\\\":\\\"#191919\\\",\\\"titleBar.activeForeground\\\":\\\"#8b888f\\\",\\\"titleBar.border\\\":\\\"#131313\\\",\\\"titleBar.inactiveBackground\\\":\\\"#191919\\\",\\\"titleBar.inactiveForeground\\\":\\\"#525053\\\",\\\"tree.inactiveIndentGuidesStroke\\\":\\\"#222222\\\",\\\"tree.indentGuidesStroke\\\":\\\"#363537\\\",\\\"walkThrough.embeddedEditorBackground\\\":\\\"#191919\\\",\\\"welcomePage.buttonBackground\\\":\\\"#363537\\\",\\\"welcomePage.buttonHoverBackground\\\":\\\"#525053\\\",\\\"welcomePage.progress.background\\\":\\\"#69676c\\\",\\\"welcomePage.progress.foreground\\\":\\\"#8b888f\\\",\\\"welcomePage.tileBackground\\\":\\\"#363537\\\",\\\"welcomePage.tileHoverBackground\\\":\\\"#525053\\\",\\\"welcomePage.tileShadow\\\":\\\"#131313\\\",\\\"widget.shadow\\\":\\\"#131313\\\"},\\\"watch\\\":false}\",\"nps/lastSessionDate\":\"Fri Sep 13 2024\",\"nps/sessionCount\":\"199\",\"cpp.1.lastSessionDate\":\"Wed Feb 01 2023\",\"cpp.1.sessionCount\":\"37\",\"java.2.lastSessionDate\":\"Wed Oct 02 2024\",\"java.2.sessionCount\":\"210\",\"javascript.1.lastSessionDate\":\"Wed Oct 02 2024\",\"javascript.1.sessionCount\":\"210\",\"typescript.1.lastSessionDate\":\"Wed Oct 02 2024\",\"typescript.1.sessionCount\":\"210\",\"csharp.1.lastSessionDate\":\"Wed Oct 02 2024\",\"csharp.1.sessionCount\":\"164\",\"~remote.forwardedPortsContainer.hidden\":\"[{\\\"id\\\":\\\"~remote.forwardedPorts\\\",\\\"isHidden\\\":false}]\",\"workbench.telemetryOptOutShown\":\"true\",\"memento/gettingStartedService\":\"{\\\"pickColorTheme\\\":{\\\"done\\\":true},\\\"pickColorThemeWeb\\\":{\\\"done\\\":true},\\\"settingsSync\\\":{\\\"done\\\":true},\\\"settingsSyncWeb\\\":{\\\"done\\\":true},\\\"GitHub.copilot#copilotWelcome#copilot.signin\\\":{\\\"done\\\":true},\\\"ms-vscode-remote.remote-wsl#wslWalkthrough#install.tools\\\":{\\\"done\\\":true},\\\"pickAFolderTask-Other\\\":{\\\"done\\\":true},\\\"ms-azuretools.vscode-docker#dockerStart#openFolder\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#no.compilers.found.windows\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#create.cpp.file\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#awaiting.activation.mac\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#awaiting.activation.linux\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#awaiting.activation.windows\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#no.compilers.found.mac\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#no.compilers.found.linux\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#verify.compiler.mac\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#verify.compiler.linux\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#verify.compiler.windows\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#relaunch.developer.command.prompt.windows\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#run.project.mac\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#run.project.linux\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#run.project.windows\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#customize.debugging.linux\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#customize.debugging.windows\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#customize.debugging.mac\\\":{\\\"done\\\":true},\\\"commandPaletteTask\\\":{\\\"done\\\":true},\\\"commandPaletteTaskWeb\\\":{\\\"done\\\":true},\\\"installGit\\\":{\\\"done\\\":true},\\\"ms-vscode-remote.remote-wsl#wslWalkthrough#explore.commands\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#verify.compiler.windows10\\\":{\\\"done\\\":true},\\\"ms-vscode.cpptools#cppWelcome#verify.compiler.windows11\\\":{\\\"done\\\":true}}\",\"workbench.statusbar.hidden\":\"[\\\"status.workspaceTrust.1647839407427\\\",\\\"status.workspaceTrust.ec4782d37bdb198420b1367fe5b2c4f0\\\",\\\"status.workspaceTrust.1648094474591\\\",\\\"status.workspaceTrust.1655714609191\\\",\\\"status.workspaceTrust.1664766271860\\\",\\\"status.workspaceTrust.1660642459864\\\",\\\"status.workspaceTrust.4ce84f1e37e50028e855d15b1b9879c6\\\",\\\"status.workspaceTrust.1667913452044\\\",\\\"status.workspaceTrust.1668248555285\\\",\\\"status.workspaceTrust.1668257094741\\\",\\\"status.workspaceTrust.065df74bb0001411f0faeddd7f6154df\\\",\\\"status.workspaceTrust.0e3b828bb7e4ad2566b6d1ac2694e840\\\",\\\"status.workspaceTrust.1681559787142\\\",\\\"status.workspaceTrust.1685782198408\\\",\\\"status.workspaceTrust.1687868575692\\\",\\\"status.workspaceTrust.1689386040346\\\",\\\"status.workspaceTrust.1690970239670\\\",\\\"status.workspaceTrust.1694357037411\\\",\\\"status.workspaceTrust.1696866504520\\\",\\\"status.workspaceTrust.1696866504834\\\",\\\"status.workspaceTrust.45e8b4474497bf8af05068b06d28325e\\\",\\\"status.workspaceTrust.1697293430770\\\",\\\"status.workspaceTrust.22c41b0d76b473f107383b5cf3807fe8\\\",\\\"status.workspaceTrust.1697600032563\\\",\\\"status.workspaceTrust.1697600054358\\\",\\\"status.workspaceTrust.1697623998913\\\",\\\"status.workspaceTrust.1697901776935\\\",\\\"status.workspaceTrust.1700209308966\\\",\\\"status.workspaceTrust.1701419075697\\\",\\\"status.workspaceTrust.1701829919637\\\",\\\"status.workspaceTrust.1704194479743\\\",\\\"status.workspaceTrust.1705312983525\\\",\\\"status.workspaceTrust.1707832617085\\\",\\\"status.workspaceTrust.1708343644931\\\",\\\"status.workspaceTrust.1708398252575\\\",\\\"status.workspaceTrust.1708858109713\\\",\\\"status.workspaceTrust.1709828165106\\\",\\\"status.workspaceTrust.1709828704923\\\"]\",\"themeUpdatedNotificationShown\":\"true\",\"workbench.view.extensions.state.hidden\":\"[{\\\"id\\\":\\\"workbench.views.extensions.installed\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.workspaceRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.popular\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.otherRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"extensions.recommendedList\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.enabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.disabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.marketplace\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchInstalled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchEnabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchDisabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchOutdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchBuiltin\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchWorkspaceUnsupported\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinFeatureExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinThemeExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinProgrammingLanguageExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.deprecatedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchRecentlyUpdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.local.installed\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.remote.installed\\\",\\\"isHidden\\\":false}]\",\"workbench.welcomePage.walkthroughMetadata\":\"[[\\\"alefragnani.Bookmarks#bookmarksWelcome\\\",{\\\"firstSeen\\\":1696867188753,\\\"stepIDs\\\":[\\\"toggle\\\",\\\"navigateToBookmarks\\\",\\\"defineLabelsForYourBookmarks\\\",\\\"exclusiveSideBar\\\",\\\"workingWithRemotes\\\",\\\"customizingAppearance\\\"],\\\"manaullyOpened\\\":false}],[\\\"GitHub.copilot#copilotWelcome\\\",{\\\"firstSeen\\\":1696867188753,\\\"stepIDs\\\":[\\\"copilot.signin\\\",\\\"copilot.firstsuggest\\\",\\\"copilot.realfiles.openrecent\\\",\\\"copilot.realfiles.quickopen\\\",\\\"copilot.iterate\\\",\\\"copilot.creativity\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-azuretools.vscode-docker#dockerStart\\\",{\\\"firstSeen\\\":1696867188753,\\\"stepIDs\\\":[\\\"openFolder\\\",\\\"openFolderMac\\\",\\\"scaffold\\\",\\\"buildImage\\\",\\\"runContainer\\\",\\\"dockerExplorer\\\",\\\"pushImage\\\",\\\"azDeploy\\\",\\\"learn\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-vscode-remote.remote-wsl#wslWalkthrough\\\",{\\\"firstSeen\\\":1696867188753,\\\"stepIDs\\\":[\\\"explore.commands\\\",\\\"open.wslwindow\\\",\\\"create.project\\\",\\\"open.project\\\",\\\"linux.environment\\\",\\\"install.tools\\\",\\\"run.debug\\\",\\\"come.back\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-vscode.cpptools#cppWelcome\\\",{\\\"firstSeen\\\":1696867188753,\\\"stepIDs\\\":[\\\"awaiting.activation.mac\\\",\\\"awaiting.activation.linux\\\",\\\"awaiting.activation.windows\\\",\\\"no.compilers.found.mac\\\",\\\"no.compilers.found.linux\\\",\\\"no.compilers.found.windows\\\",\\\"verify.compiler.mac\\\",\\\"verify.compiler.linux\\\",\\\"verify.compiler.windows\\\",\\\"create.cpp.file\\\",\\\"relaunch.developer.command.prompt.windows\\\",\\\"run.project.mac\\\",\\\"run.project.linux\\\",\\\"run.project.windows\\\",\\\"customize.debugging.linux\\\",\\\"customize.debugging.windows\\\",\\\"customize.debugging.mac\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-python.python#pythonWelcome\\\",{\\\"firstSeen\\\":1720636472690,\\\"stepIDs\\\":[\\\"python.createPythonFolder\\\",\\\"python.createPythonFile\\\",\\\"python.installPythonWin8\\\",\\\"python.installPythonMac\\\",\\\"python.installPythonLinux\\\",\\\"python.createEnvironment\\\",\\\"python.runAndDebug\\\",\\\"python.learnMoreWithDS\\\"],\\\"manaullyOpened\\\":false}],[\\\"ms-python.python#pythonDataScienceWelcome\\\",{\\\"firstSeen\\\":1720636472690,\\\"stepIDs\\\":[\\\"python.installJupyterExt\\\",\\\"python.createNewNotebook\\\",\\\"python.openInteractiveWindow\\\",\\\"python.dataScienceLearnMore\\\"],\\\"manaullyOpened\\\":false}]]\",\"ces/skipSurvey\":\"1.65.2\",\"workbench.panel.alignment\":\"center\",\"fileBasedRecommendations/promptedRecommendations\":\"{\\\"cpp\\\":[\\\"ms-vscode.cpptools-extension-pack\\\"],\\\"dockercompose\\\":[\\\"ms-azuretools.vscode-docker\\\"]}\",\"workbench.view.remote.state.hidden\":\"[{\\\"id\\\":\\\"targetsContainers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"detailsContainers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"devVolumes\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"sshHosts\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"targetsWsl\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"remoteTargets\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"~remote.helpPanel\\\",\\\"isHidden\\\":false}]\",\"remote.explorerType\":\"wsl\",\"fileBasedRecommendations/promptedFileExtensions\":\"[\\\"out\\\",\\\"inp\\\"]\",\"cpp.1.editedCount\":\"10\",\"cpp.1.editedDate\":\"Tue Jan 31 2023\",\"commandPalette.mru.cache\":\"{\\\"usesLRU\\\":true,\\\"entries\\\":[{\\\"key\\\":\\\"bookmarks.toggle\\\",\\\"value\\\":3},{\\\"key\\\":\\\"npm-script.run\\\",\\\"value\\\":5},{\\\"key\\\":\\\"snippet.find\\\",\\\"value\\\":8},{\\\"key\\\":\\\"workbench.action.replaceInFiles\\\",\\\"value\\\":9},{\\\"key\\\":\\\"editor.action.insertSnippet\\\",\\\"value\\\":11},{\\\"key\\\":\\\"editor.action.rename\\\",\\\"value\\\":14},{\\\"key\\\":\\\"workbench.action.terminal.rename\\\",\\\"value\\\":15},{\\\"key\\\":\\\"vscode-debug-visualizer.new-visualizer\\\",\\\"value\\\":20},{\\\"key\\\":\\\"workbench.action.chat.nextCodeBlock\\\",\\\"value\\\":29},{\\\"key\\\":\\\"C_Cpp.ConfigurationEditJSON\\\",\\\"value\\\":31},{\\\"key\\\":\\\"workbench.action.toggleKeybindingsLog\\\",\\\"value\\\":33},{\\\"key\\\":\\\"workbench.action.terminal.toggleTerminal\\\",\\\"value\\\":96},{\\\"key\\\":\\\"editor.action.toggleWordWrap\\\",\\\"value\\\":103},{\\\"key\\\":\\\"workbench.action.terminal.clear\\\",\\\"value\\\":117},{\\\"key\\\":\\\"workbench.action.openGlobalKeybindings\\\",\\\"value\\\":119},{\\\"key\\\":\\\"background.config\\\",\\\"value\\\":134},{\\\"key\\\":\\\"monokai_pro.select_theme\\\",\\\"value\\\":140},{\\\"key\\\":\\\"bracket-pair-color-dlw.run\\\",\\\"value\\\":142},{\\\"key\\\":\\\"vscode-icons.activateIcons\\\",\\\"value\\\":149},{\\\"key\\\":\\\"material-icon-theme.activateIcons\\\",\\\"value\\\":152},{\\\"key\\\":\\\"editor.action.formatDocument\\\",\\\"value\\\":190},{\\\"key\\\":\\\"editor.action.formatDocument.multiple\\\",\\\"value\\\":193},{\\\"key\\\":\\\"workbench.action.openGlobalKeybindingsFile\\\",\\\"value\\\":215},{\\\"key\\\":\\\"C_Cpp.DisableErrorSquiggles\\\",\\\"value\\\":224},{\\\"key\\\":\\\"codesnap.start\\\",\\\"value\\\":230},{\\\"key\\\":\\\"C_Cpp.ConfigurationEditUI\\\",\\\"value\\\":247},{\\\"key\\\":\\\"editor.action.formatSelection\\\",\\\"value\\\":248},{\\\"key\\\":\\\"editor.action.unicodeHighlight.showExcludeOptions\\\",\\\"value\\\":249},{\\\"key\\\":\\\"C_Cpp.BuildAndDebugFile\\\",\\\"value\\\":252},{\\\"key\\\":\\\"snippet-generator.generate-snippet\\\",\\\"value\\\":255},{\\\"key\\\":\\\"workbench.action.openSnippets\\\",\\\"value\\\":256},{\\\"key\\\":\\\"C_Cpp.EnableErrorSquiggles\\\",\\\"value\\\":257},{\\\"key\\\":\\\"workbench.action.openSettings2\\\",\\\"value\\\":258},{\\\"key\\\":\\\"workbench.action.openSettingsJson\\\",\\\"value\\\":259},{\\\"key\\\":\\\"C_Cpp.SelectIntelliSenseConfiguration\\\",\\\"value\\\":261}]}\",\"commandPalette.mru.counter\":\"262\",\"workbench.view.extension.bookmarks.state.hidden\":\"[{\\\"id\\\":\\\"bookmarksExplorer\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"bookmarksHelpAndFeedback\\\",\\\"isHidden\\\":false}]\",\"memento/workbench.editor.keybindings\":\"{\\\"searchHistory\\\":[\\\"@command:bookmarks.toggle\\\",\\\"@command:bookm\\\",\\\"runc\\\",\\\"\\\\\\\"ctrl+b\\\\\\\"\\\",\\\"ru\\\",\\\"runcode\\\",\\\"\\\\\\\"ctrl+shift+h\\\\\\\"\\\",\\\"\\\\\\\"ctr\\\",\\\"f\\\",\\\"ctrl sh\\\",\\\"ctrl shift m\\\",\\\"ctrl al\\\",\\\"ctrl alt \\\",\\\"ctrl alt shift \\\",\\\"ctrl alt shift j\\\",\\\"f2\\\",\\\"renam\\\",\\\"ctr\\\",\\\"ctrl '\\\",\\\"@command:workbench.action.openSnippets\\\",\\\"rename\\\",\\\"ctrl f2\\\",\\\"inline.su\\\",\\\"inline.sugg\\\",\\\"inline.suggét\\\",\\\"inline.suggé\\\",\\\"inline.suggest\\\",\\\"alt + \\\",\\\"alt +u\\\",\\\"alt +up\\\",\\\"\\\\\\\"ctrl+shift+up\\\\\\\"\\\",\\\"\\\\\\\"\\\",\\\"\\\\\\\"a\\\",\\\"alt+upa\\\",\\\"alt+uparr\\\",\\\"alt+uparrow\\\",\\\"\\\\\\\"ctrl+shift+down\\\\\\\"\\\",\\\"aldp\\\",\\\"alt+down\\\",\\\"\\\\\\\"ct\\\",\\\"\\\\\\\"ctrl\\\\\\\"\\\",\\\"\\\\\\\"c\\\",\\\"ct\\\",\\\"\\\\\\\"alt\\\\\\\"\\\",\\\"at\\\",\\\"multi\\\",\\\"rơ\\\",\\\"row\\\",\\\"mu\\\",\\\"mul\\\",\\\"multil\\\",\\\"multiline\\\",\\\"multip\\\",\\\"multiple line\\\",\\\"multiple\\\",\\\"al\\\",\\\"alt\\\",\\\"copyLinesDownAction\\\",\\\"\\\\\\\"ctrl+shift+d\\\\\\\"\\\",\\\"shift a\\\",\\\"shift alt \\\",\\\"shift alt down\\\",\\\"pointer\\\",\\\"mouse\\\",\\\"stop\\\",\\\"stop code\\\",\\\"ctrl b\\\",\\\"ctrl + k\\\",\\\"ctrl k\\\",\\\"ctrl shif\\\",\\\"ctrl shift\\\",\\\"ctrl shift en\\\",\\\"ctrl shift enter\\\",\\\"íne\\\",\\\"inser\\\",\\\"insert line \\\",\\\"insert line below\\\",\\\"du\\\",\\\"dupi\\\",\\\"line\\\",\\\"copy\\\",\\\"copy line dơ\\\",\\\"copy line down\\\",\\\"@ext:GitHub.copilot\\\",\\\"ctrl\\\",\\\"ctrl s\\\",\\\"copli\\\",\\\"côp;\\\",\\\"c\\\",\\\"copl\\\",\\\"cop\\\",\\\"@command:workbench.action.terminal.clear +when:terminalHasBeenCreated || terminalProcessSupported\\\",\\\"ctrl \\\",\\\"ctrl + p\\\",\\\"@command:C_Cpp.DisableErrorSquiggles\\\",\\\"copi\\\",\\\"copilot\\\",\\\"EnableErrorSquiggles\\\",\\\"@command:workbench.action.openSettings2\\\",\\\"@command:C_Cpp.EnableErrorSquiggles\\\"]}\",\"workbench.view.extension.code-time-sidebar.state.hidden\":\"[{\\\"id\\\":\\\"codetime.webView\\\",\\\"isHidden\\\":false}]\",\"refactorPreview.hidden\":\"[{\\\"id\\\":\\\"refactorPreview\\\",\\\"isHidden\\\":false}]\",\"workbench.view.extension.tabnine-access.state.hidden\":\"[{\\\"id\\\":\\\"tabnine-today\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"tabnine-home\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"tabnine-notifications\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"tabnine.chat\\\",\\\"isHidden\\\":false}]\",\"github-marvinthang\":\"[{\\\"id\\\":\\\"github.copilot\\\",\\\"name\\\":\\\"GitHub Copilot\\\",\\\"allowed\\\":true},{\\\"id\\\":\\\"github.copilot-labs\\\",\\\"name\\\":\\\"GitHub Copilot Labs\\\",\\\"allowed\\\":true}]\",\"nps/isCandidate\":\"false\",\"Comments.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.comments\\\",\\\"isHidden\\\":false}]\",\"snippets.usageTimestamps\":\"[[\\\"MATRIX.code-snippets/MATRIX\\\",1665740167877],[\\\"DEBUGGER.code-snippets/DEBUGGER\\\",1665800530574],[\\\"DINIC_FLOW.code-snippets/DINIC_FLOW\\\",1665800592607],[\\\"DISJOINT_SPARSE_TABLE.code-snippets/DISJOINT_SPARSE_TABLE\\\",1665800716392],[\\\"EDMONDS_KARP.code-snippets/EDMONDS_KARP\\\",1665800865993],[\\\"FAST_FOURIER_TRANSFORM.code-snippets/FAST_FOURIER_TRANSFORM\\\",1665800933488],[\\\"FASTIO.code-snippets/FASTIO\\\",1665800974942],[\\\"FENWICK.code-snippets/FENWICK\\\",1665801020647],[\\\"GAUSS_ELIMINATION.code-snippets/GAUSS_ELIMINATION\\\",1665801082267],[\\\"HASHING.code-snippets/HASHING\\\",1665801670764],[\\\"MAX_FLOW_PVH.code-snippets/MAX_FLOW_PVH\\\",1665801755587],[\\\"MAXMIN.code-snippets/MAXMIN\\\",1665802369456],[\\\"MIN_COST.code-snippets/MIN_COST\\\",1665802426694],[\\\"PARTIALLY_PERSISTENT_DSU.code-snippets/PARTIALLY_PERSISTENT_DSU\\\",1665802521146],[\\\"SPARSE_TABLE.code-snippets/SPARSE_TABLE\\\",1665802589279],[\\\"GENERATOR.code-snippets/GENERATOR\\\",1665802891569],[\\\"COMPRESS.code-snippets/COMPRESS\\\",1665806140698],[\\\"SQR.code-snippets/SQR\\\",1665820519432],[\\\"MODULAR.code-snippets/MODULAR\\\",1665998020640],[\\\"COMBINATION.code-snippets/COMBINATION\\\",1665998050658],[\\\"SUFFIX_ARRAY.code-snippets/SUFFIX_ARRAY\\\",1675218615012],[\\\"DISJOINT_SET_UNION.code-snippets/DISJOINT_SET_UNION\\\",1697600011647],[\\\"START.code-snippets/START\\\",1717156090531],[\\\"marvinthang.code-snippets/AHO_CORASICK_ARR\\\",1717156831439],[\\\"marvinthang.code-snippets/AHO_CORASICK_PTR\\\",1717156939120],[\\\"GRADER.code-snippets/GRADER\\\",1717157665740],[\\\"marvinthang.code-snippets/BICONNECTED_COMPONENT\\\",1721201658762],[\\\"marvinthang.code-snippets/TWO_EDGE_CONNECTED_COMPONENT\\\",1721203116090],[\\\"marvinthang.code-snippets/BRIDGE_ARTICULATION\\\",1721204928764],[\\\"marvinthang.code-snippets/STRONGLY_CONNECTED_COMPONENT\\\",1721207381896],[\\\"marvinthang.code-snippets/LCA_BL\\\",1721207785432],[\\\"marvinthang.code-snippets/LCA_RMQ\\\",1721207910265],[\\\"marvinthang.code-snippets/MAX_FLOW_PVH\\\",1721236673587],[\\\"marvinthang.code-snippets/DINIC_FLOW\\\",1721237948374],[\\\"marvinthang.code-snippets/MIN_COST_FLOW\\\",1721243677896],[\\\"marvinthang.code-snippets/LINE_CONTAINER\\\",1721292544756],[\\\"marvinthang.code-snippets/Z_FUNCTION\\\",1721392375949],[\\\"marvinthang.code-snippets/KMP\\\",1721393856371],[\\\"marvinthang.code-snippets/DISJOINT_SPARSE_TABLE\\\",1721396696532],[\\\"marvinthang.code-snippets/KNUTH_MORRIS_PRATT\\\",1721396795745],[\\\"marvinthang.code-snippets/TEMPLATE\\\",1721399100688],[\\\"marvinthang.code-snippets/FENWICK_TREE_RANGE\\\",1721556647760],[\\\"marvinthang.code-snippets/CONVEX_HULL_TRICK\\\",1721651872793],[\\\"marvinthang.code-snippets/PARTIALLY_PERSISTENT_DSU\\\",1722181420784],[\\\"marvinthang.code-snippets/WAVELET_TREE\\\",1725036317197],[\\\"marvinthang.code-snippets/SUFFIX_ARRAY\\\",1725703052794],[\\\"marvinthang.code-snippets/MANACHER\\\",1725703055866],[\\\"marvinthang.code-snippets/GEOMETRY\\\",1726140057056],[\\\"marvinthang.code-snippets/BENCHMARK\\\",1726391891178],[\\\"marvinthang.code-snippets/GAUSS_ELIMINATION\\\",1726536926607],[\\\"marvinthang.code-snippets/BITSET_TRICK\\\",1726730336699],[\\\"marvinthang.code-snippets/BIGINT\\\",1726733568210],[\\\"marvinthang.code-snippets/MATRIX\\\",1726765544114],[\\\"marvinthang.code-snippets/MAX_FLOW\\\",1726767421403],[\\\"marvinthang.code-snippets/SPARSE_TABLE\\\",1726909825697],[\\\"marvinthang.code-snippets/RANDOM\\\",1726934671862],[\\\"marvinthang.code-snippets/SUBSET_CONVOLUTION\\\",1727026595133],[\\\"marvinthang.code-snippets/GCD\\\",1727162678029],[\\\"marvinthang.code-snippets/FAST_FOURIER_TRANSFORM\\\",1727416752065],[\\\"marvinthang.code-snippets/NUMBER_THEORETIC_TRANSFORM\\\",1727444697170],[\\\"marvinthang.code-snippets/FENWICK_TREE\\\",1727445495955],[\\\"marvinthang.code-snippets/SEGTREE\\\",1727445501719],[\\\"marvinthang.code-snippets/LAZY_SEGTREE\\\",1727445506201],[\\\"marvinthang.code-snippets/BUMP_ALLOCATOR\\\",1727530077555],[\\\"marvinthang.code-snippets/DISJOINT_SET_UNION\\\",1727685659760],[\\\"marvinthang.code-snippets/TWO_SAT\\\",1727750951862],[\\\"marvinthang.code-snippets/GENERATOR\\\",1727771454017],[\\\"marvinthang.code-snippets/GRADER\\\",1727795234426],[\\\"marvinthang.code-snippets/GRAPH\\\",1727837285106],[\\\"marvinthang.code-snippets/OFFSET_VECTOR\\\",1727837713831],[\\\"marvinthang.code-snippets/FASTIO_KACTL\\\",1727838478747],[\\\"marvinthang.code-snippets/MODINT\\\",1727841930860],[\\\"marvinthang.code-snippets/START\\\",1727845225118],[\\\"marvinthang.code-snippets/MAXMIN\\\",1727845358292]]\",\"views.customizations\":\"{\\\"viewContainerLocations\\\":{\\\"workbench.views.service.panel.17827b40-7980-41bf-8535-94638f93a3a1\\\":1},\\\"viewLocations\\\":{\\\"workbench.panel.repl.view\\\":\\\"workbench.views.service.panel.17827b40-7980-41bf-8535-94638f93a3a1\\\"},\\\"viewContainerBadgeEnablementStates\\\":{}}\",\"workbench.view.extension.references-view.state.hidden\":\"[{\\\"id\\\":\\\"references-view.tree\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"CppReferencesView\\\",\\\"isHidden\\\":false}]\",\"cpp.1.isCandidate\":\"false\",\"cpp.1.skipVersion\":\"1.74.2\",\"workbench.view.extension.gitlens.state.hidden\":\"[{\\\"id\\\":\\\"gitlens.views.home\\\",\\\"isHidden\\\":false}]\",\"workbench.view.extension.gitlensPanel.state.hidden\":\"[{\\\"id\\\":\\\"gitlens.views.timeline\\\",\\\"isHidden\\\":false}]\",\"workbench.view.extension.cph-judge-view-container.state.hidden\":\"[{\\\"id\\\":\\\"cph.judgeView\\\",\\\"isHidden\\\":false}]\",\"workbench.view.extension.copilot-labs.state.hidden\":\"[{\\\"id\\\":\\\"copilotSidebar.explain\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"copilotSidebar.translate\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"copilotSidebar.toolbox\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"copilotSidebar.generateTests\\\",\\\"isHidden\\\":false}]\",\"workbench.view.extension.dockerView.state.hidden\":\"[{\\\"id\\\":\\\"dockerContainers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerImages\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerRegistries\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerNetworks\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerVolumes\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"vscode-docker.views.dockerContexts\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"vscode-docker.views.help\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.chatSidebar.copilot.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.chat.view.copilot\\\",\\\"isHidden\\\":false}]\",\"workbench.welcomePage.hiddenCategories\":\"[\\\"github.copilot\\\",\\\"ms-vscode.cpptools#cppWelcome\\\"]\",\"workbench.view.extension.tabnine.state.hidden\":\"[{\\\"id\\\":\\\"tabnine.chat\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"tabnine.chat.welcome\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"tabnine.authenticate\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"tabnine.loading\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.chatSidebar.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.chat.view.copilot\\\",\\\"isHidden\\\":false}]\",\"extensionsAssistant/importantRecommendationsIgnore\":\"[\\\"ms-vscode.cpptools-extension-pack\\\"]\",\"workbench.activityBar.location\":\"default\",\"inline-chat-history\":\"[\\\"/doc\\\"]\",\"terminal.integrated.showTerminalConfigPrompt\":\"false\",\"extension.features.state\":\"{\\\"GitHub.copilot-chat\\\":{\\\"languageModels\\\":{\\\"disabled\\\":false,\\\"accessCount\\\":151}}}\",\"languageModelAccess.copilot-gpt-4\":\"[\\\"github.copilot-chat\\\"]\",\"languageModelStats.copilot-gpt-4\":\"{\\\"extensions\\\":[{\\\"extensionId\\\":\\\"GitHub.copilot-chat\\\",\\\"requestCount\\\":0,\\\"tokenCount\\\":0,\\\"participants\\\":[{\\\"id\\\":\\\"github.copilot.default\\\",\\\"requestCount\\\":8,\\\"tokenCount\\\":14673}]}]}\",\"languageModelAccess.copilot-gpt-3.5-turbo\":\"[\\\"github.copilot-chat\\\"]\",\"languageModelStats.copilot-gpt-3.5-turbo\":\"{\\\"extensions\\\":[{\\\"extensionId\\\":\\\"GitHub.copilot-chat\\\",\\\"requestCount\\\":8,\\\"tokenCount\\\":13039,\\\"participants\\\":[]}]}\",\"no-updates-running-as-admin\":\"true\",\"languageModelAccess.gpt-4-0125-preview\":\"[\\\"github.copilot-chat\\\"]\",\"languageModelStats.gpt-4-0125-preview\":\"{\\\"extensions\\\":[{\\\"extensionId\\\":\\\"GitHub.copilot-chat\\\",\\\"requestCount\\\":0,\\\"tokenCount\\\":0,\\\"participants\\\":[{\\\"id\\\":\\\"github.copilot.default\\\",\\\"requestCount\\\":69,\\\"tokenCount\\\":142726}]}]}\",\"languageModelAccess.gpt-3.5-turbo\":\"[\\\"github.copilot-chat\\\"]\",\"languageModelStats.gpt-3.5-turbo\":\"{\\\"extensions\\\":[{\\\"extensionId\\\":\\\"GitHub.copilot-chat\\\",\\\"requestCount\\\":66,\\\"tokenCount\\\":225443,\\\"participants\\\":[]}]}\",\"workbench.view.extension.test.state.hidden\":\"[{\\\"id\\\":\\\"workbench.view.testing\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.view.testCoverage\\\",\\\"isHidden\\\":false}]\",\"tabs-list-width-horizontal\":\"116\",\"javascript.1.editedCount\":\"2\",\"javascript.1.editedDate\":\"Sat Jul 27 2024\",\"expandSuggestionDocs\":\"true\",\"userDataProfiles.state.hidden\":\"[{\\\"id\\\":\\\"workbench.views.profiles.export.preview\\\",\\\"isHidden\\\":false}]\",\"workbench.view.extension.chatgpt-activitybar.state.hidden\":\"[{\\\"id\\\":\\\"chatgpt.sidebar\\\",\\\"isHidden\\\":false}]\",\"workbench.views.service.panel.17827b40-7980-41bf-8535-94638f93a3a1.state.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.repl.view\\\",\\\"isHidden\\\":false}]\",\"nps/skipVersion\":\"1.90.2\"}}"
}