#pragma once
template<charMARGIN>structForString{staticconstexprcharchange(charc){returnc-MARGIN;}staticconstexprcharrestore(chara){returna+MARGIN;}staticstd::vector<char>change(conststd::string&s){std::vector<char>v(s.size());for(inti=0;i<s.size();i++)v[i]=change(s[i]);returnv;}staticstd::stringrestore(conststd::vector<char>&v){std::strings(v.size(),'#');for(inti=0;i<v.size();i++)s[i]=restore(v[i]);returns;}};structFSAa{staticconstexprcharchange(charc){returnc<='Z'?c-'A':26+c-'a';}staticconstexprcharrestore(chara){returna<26?'A':a-26+'a';}staticstd::vector<char>change(conststd::string&s){std::vector<char>v(s.size());for(inti=0;i<s.size();i++)v[i]=change(s[i]);returnv;}staticstd::stringrestore(conststd::vector<char>&v){std::strings(v.size(),'#');for(inti=0;i<v.size();i++)s[i]=restore(v[i]);returns;}};usingFSA=ForString<'A'>;usingFSa=ForString<'a'>;usingFS0=ForString<'0'>;#ifdef STR
#define STRA(s) \
STR(s##tomato); \
auto s = FSA::change(s##tomato);
#define STRa(s) \
STR(s##tomato); \
auto s = FSa::change(s##tomato);
#define STR0(s) \
STR(s##tomato); \
auto s = FS0::change(s##tomato);
#endif
#line 2 "library/sequence/ForString.hpp"
template<charMARGIN>structForString{staticconstexprcharchange(charc){returnc-MARGIN;}staticconstexprcharrestore(chara){returna+MARGIN;}staticstd::vector<char>change(conststd::string&s){std::vector<char>v(s.size());for(inti=0;i<s.size();i++)v[i]=change(s[i]);returnv;}staticstd::stringrestore(conststd::vector<char>&v){std::strings(v.size(),'#');for(inti=0;i<v.size();i++)s[i]=restore(v[i]);returns;}};structFSAa{staticconstexprcharchange(charc){returnc<='Z'?c-'A':26+c-'a';}staticconstexprcharrestore(chara){returna<26?'A':a-26+'a';}staticstd::vector<char>change(conststd::string&s){std::vector<char>v(s.size());for(inti=0;i<s.size();i++)v[i]=change(s[i]);returnv;}staticstd::stringrestore(conststd::vector<char>&v){std::strings(v.size(),'#');for(inti=0;i<v.size();i++)s[i]=restore(v[i]);returns;}};usingFSA=ForString<'A'>;usingFSa=ForString<'a'>;usingFS0=ForString<'0'>;#ifdef STR
#define STRA(s) \
STR(s##tomato); \
auto s = FSA::change(s##tomato);
#define STRa(s) \
STR(s##tomato); \
auto s = FSa::change(s##tomato);
#define STR0(s) \
STR(s##tomato); \
auto s = FS0::change(s##tomato);
#endif