{"id":179089,"date":"2013-05-08T15:30:03","date_gmt":"2013-05-08T11:30:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=179089"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=179089","title":{"rendered":"<span class=\"post_title\">\u0427\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u0430<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0414\u0430\u0432\u043d\u044b\u043c-\u0434\u0430\u0432\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0430\u0432\u0430 \u0431\u044b\u043b\u0430 \u0437\u0435\u043b\u0435\u043d\u0435\u0435, \u0430 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0432\u044b\u0448\u0435, \u0436\u0438\u043b-\u0431\u044b\u043b \u0442\u0440\u043e\u043b\u043b\u044c, \u043f\u043e \u0438\u043c\u0435\u043d\u0438 Xenocephal. \u0416\u0438\u043b \u043e\u043d, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u043d\u043e \u043c\u043d\u0435 \u043f\u043e\u0432\u0435\u0437\u043b\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u043c <a href=\"http:\/\/www.sql.ru\/forum\/afsearch.aspx?s=Xenocephal\">\u0444\u043e\u0440\u0443\u043c\u0435<\/a>, \u0433\u0434\u0435 \u044f, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043d\u0430\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0443\u043c\u0430-\u0440\u0430\u0437\u0443\u043c\u0430. \u042f \u0443\u0436\u0435 \u043d\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u044e \u0442\u043e\u043f\u0438\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0442\u0435\u043a\u0430\u043b\u0430 \u0431\u0435\u0441\u0435\u0434\u0430, \u043d\u043e \u0441\u0443\u0442\u044c \u0435\u0435 \u0441\u0432\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e Xenocephal \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0443\u0431\u0435\u0434\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0445, \u0447\u0442\u043e Lisp (\u0441 \u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438) \u2014 \u0432\u0441\u0435\u043c\u0443 \u0433\u043e\u043b\u043e\u0432\u0430, \u0430 C++, \u0441 \u0435\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438, \u0436\u0430\u043b\u043a\u043e\u0435 \u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u043b\u0435\u0432\u043e\u0439 \u0440\u0443\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430\u043c\u0435\u0442\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u043d\u0430\u0431\u0438\u0432\u0448\u0435\u0433\u043e \u043e\u0441\u043a\u043e\u043c\u0438\u043d\u0443 <a href=\"http:\/\/www.solarix.ru\/for_developers\/cpp\/snippets\/factorial.shtml\">\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u0430<\/a> \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0423 \u043c\u0435\u043d\u044f, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u043e\u0437\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0447\u0442\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u044b Lisp-\u0430 \u2014 \u044d\u0442\u043e \u043d\u0435\u043f\u043e\u043c\u0435\u0440\u043d\u043e \u043a\u0440\u0443\u0442\u043e \u0438, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043c\u043d\u0435 \u043d\u0435\u0447\u0435\u0433\u043e \u0431\u044b\u043b\u043e \u0435\u043c\u0443 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c, \u043d\u043e \u0444\u0440\u0430\u0437\u0430 \u043f\u0440\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u044b C++ \u0438 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0437\u0430\u0441\u0435\u043b\u0430 \u0432 \u043c\u043e\u0439 \u043d\u0435\u043e\u043a\u0440\u0435\u043f\u0448\u0438\u0439 \u043c\u043e\u0437\u0433 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0430 \u0442\u0435\u0440\u0437\u0430\u0442\u044c \u043c\u0435\u043d\u044f \u0438\u0437\u043d\u0443\u0442\u0440\u0438. \u0418 \u0432 \u043e\u0434\u0438\u043d \u0443\u0436\u0430\u0441\u043d\u044b\u0439 \u0434\u0435\u043d\u044c, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b: \u00ab\u041a\u0430\u043a\u043e\u0433\u043e \u0447\u0435\u0440\u0442\u0430??? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043c\u0435\u0442\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c!\u00bb<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u043b\u0430 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D1%8B:_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B,_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%B8_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B\">\u041a\u043d\u0438\u0433\u0430 \u0414\u0440\u0430\u043a\u043e\u043d\u0430<\/a>. \u0417\u0430\u0434\u0430\u0447\u0430 \u043d\u0430\u0448\u043b\u0430\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u043e. \u042f \u0441\u0447\u0435\u043b, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u041d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0430 (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Nondeterministic_finite_automaton\">\u041d\u041a\u0410<\/a>) \u0432 \u0414\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0410\u0432\u0442\u043e\u043c\u0430\u0442 (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Deterministic_finite_automaton\">\u0414\u041a\u0410<\/a>) \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 C++. \u041d\u0435\u0442\u043b\u0435\u043d\u043d\u044b\u0439 <a href=\"http:\/\/www.proklondike.com\/books\/cpp\/alexandresku_cpp_modern_design.html\">\u0442\u0440\u0443\u0434<\/a> \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0435\u0441\u043a\u0443 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u0430\u0441\u0441\u0443\u2026<\/p>\n<p>  \u041d\u0430\u0447\u0430\u043b \u044f, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0441 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432. \u041c\u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c, \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0433\u0440\u0430\u0444\u044b:<\/p>\n<pre><code class=\"cpp\">template &lt;class T, int Src, int Dst, char Chr = 0&gt; struct Edge { enum { Source  = Src,          Dest    = Dst,          Char    = Chr        };   typedef T Next;   static void Dump(void) {printf(&quot;%3d -%c-&gt; %3d\\n&quot;,Src,Chr,Dst);T::Dump();} }; <\/code><\/pre>\n<p>  \u0414\u0443\u0433\u0430 \u0433\u0440\u0430\u0444\u0430 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 (Src) \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 (Dst) \u0432\u0435\u0440\u0448\u0438\u043d \u0438 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c (Chr). \u041d\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0443\u0433\u0438 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f), \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u043e\u043c\u0435\u0447\u0430\u043b\u0438\u0441\u044c \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c. \u0422\u0438\u043f Next, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u044d\u0442\u043e\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0435, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0443\u0433\u0438 \u0432 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">struct NullType {static void Dump(void) {printf(&quot;\\n&quot;);}};  template &lt;int S, int D, int C, class T, class R&gt; struct AddEdge; template &lt;int S, int D, int C, class R&gt; struct AddEdge&lt;S,D,C,NullType,R&gt; {     typedef typename Edge&lt;R,S,D,C&gt; Result; }; template &lt;int S, int D, int C, class T, class R&gt; struct AddEdge&lt;S,D,C,Edge&lt;T,S,D,C&gt;,R&gt; {     typedef typename AddEdge&lt;S,D,C,T,R&gt;::Result Result; }; template &lt;int S, int D, int C, int s, int d, int c, class T, class R&gt;  struct AddEdge&lt;S,D,C,Edge&lt;T,s,d,c&gt;,R&gt; {     typedef typename AddEdge&lt;S,D,C,T,Edge&lt;R,s,d,c&gt; &gt;::Result Result; }; <\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0431\u044b\u043b\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 (\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0443\u0442\u0438\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438, \u043b\u044e\u0431\u044b\u0445, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0433\u0440\u0430\u0444\u044b):<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Append<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template &lt;class A, class B&gt; struct Append; template &lt;class T&gt; struct Append&lt;NullType,T&gt; {     typedef T Result; }; template &lt;int S, int D, int C, class T, class B&gt;  struct Append&lt;Edge&lt;T,S,D,C&gt;,B&gt; {     typedef typename Append&lt;T,Edge&lt;B,S,D,C&gt; &gt;::Result Result; }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Join<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template &lt;class A, class B&gt; struct Join; template &lt;class B&gt; struct Join&lt;NullType,B&gt; {     typedef B Result; }; template &lt;int N, class T, class B&gt; struct Join&lt;Set&lt;N,T&gt;,B&gt; {     typedef typename Join&lt;T,typename AddSet&lt;N,B,NullType&gt;::Result&gt;::Result Result; }; template &lt;int S, int D, int C, class T, class B&gt; struct Join&lt;Edge&lt;T,S,D,C&gt;,B&gt; {     typedef typename Join&lt;T,typename AddEdge&lt;S,D,C,B,NullType&gt;::Result&gt;::Result Result; }; template &lt;int N, class S, class T, class B&gt; struct Join&lt;StateList&lt;N,S,T&gt;,B&gt; {     typedef typename Join&lt;T,typename AddState&lt;N,S,B,NullType&gt;::Result&gt;::Result Result; }; template &lt;int Src, int Dst, int a, class S, class T, class B&gt;  struct Join&lt;StateListEx&lt;Src,Dst,a,S,T&gt;,B&gt; {     typedef typename Join&lt;T,typename AddState&lt;Dst,S,B,NullType&gt;::Result&gt;::Result Result; }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u2026 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u0430 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0441\u043f\u0438\u0441\u043a\u0430:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Map<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template &lt;class T, int V, class R, template &lt;int,int&gt; class F&gt; struct Map; template &lt;int V, class R, template &lt;int,int&gt; class F&gt; struct Map&lt;NullType,V,R,F&gt; {     typedef R Result; }; template &lt;int N, class T, int V, class R, template &lt;int,int&gt; class F&gt;  struct Map&lt;Set&lt;N,T&gt;,V,R,F&gt; {      typedef typename Map&lt;T,V,Set&lt;F&lt;N,V&gt;::Result,R&gt;,F&gt;::Result Result; }; template &lt;class T, int S, int D, int C, int V, class R, template &lt;int,int&gt; class F&gt;  struct Map&lt;Edge&lt;T,S,D,C&gt;,V,R,F&gt; {      typedef typename Map&lt;T,V,Edge&lt;R,F&lt;S,V&gt;::Result,F&lt;D,V&gt;::Result,C&gt;,F&gt;::Result Result; }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u041d\u041a\u0410 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0421\u0430\u043c\u0430 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D1%8B:_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B,_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%B8_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B\">\u043a\u043d\u0438\u0433\u0435<\/a>, \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0439 \u0432\u044b\u0448\u0435 \u0438 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u0438\u043c\u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0443\u0433\u0430\u043c\u0438. <\/p>\n<p>  \u0418\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0434\u0443\u0433\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">C<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template &lt;char Chr&gt; struct C { typedef typename Edge&lt;NullType,0,1,Chr&gt; Result;   enum {Count = 2}; }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b 0 \u0438 1 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>  \u0414\u0432\u0430 \u0433\u0440\u0430\u0444\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \/A|B\/ \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-lrQBjOi0Q1c\/UI5vf2nBCmI\/AAAAAAAAAKE\/nWt6NuDuT5U\/s1600\/0004.PNG\" alt=\"image\"\/><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">D<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template &lt;int X, int N&gt; struct Add { enum { Result = X+N }; };  template &lt;class A, class B&gt; struct DImpl { private:     typedef typename Append&lt;               typename Map&lt;typename A::Result, 2, NullType, Add&gt;::Result,               typename Map&lt;typename B::Result, A::Count+2, NullType, Add&gt;::Result               &gt;::Result N0;     typedef typename   Edge&lt;N0,0,2&gt; N1;     typedef typename   Edge&lt;N1,0,A::Count+2&gt; N2;     typedef typename   Edge&lt;N2,3,1&gt; N3;   public:     typedef typename   Edge&lt;N3,A::Count+3,1&gt; Result;     enum {Count = A::Count+B::Count+2}; }; template &lt;class T1, class T2, class T3 = NullType, class T4 = NullType, class T5 = NullType&gt; struct D: public DImpl&lt;T1, D&lt;T2,T3,T4,T5&gt; &gt; {}; template &lt;class T1, class T2&gt; struct D&lt;T1,T2,NullType,NullType,NullType&gt;: public DImpl&lt;T1,T2&gt; {}; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c, \u043c\u044b \u00ab\u0441\u043b\u0438\u0432\u0430\u0435\u043c\u00bb \u0434\u0432\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0430 (A \u0438 B) (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0445 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043f\u0435\u0440\u0435\u043d\u0443\u043c\u0435\u0440\u0443\u044e\u0442\u0441\u044f), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0438\u0445 \u043d\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0443\u0433\u0430\u043c\u0438, \u043f\u043e \u0441\u0445\u0435\u043c\u0435, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435. \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043f\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u043c\u0435\u044e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b 0 \u0438 1 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>  \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \/AB\/:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/3.bp.blogspot.com\/-uRbjGCOTuZU\/UI5utNO9lkI\/AAAAAAAAAJ8\/qDVuaL1QcNE\/s1600\/0003.PNG\" alt=\"image\"\/><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">E<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template &lt;int X, int N&gt; struct ConvA { enum { Result = (X==1) ? (X+N-1) : X }; };  template &lt;int X, int N&gt; struct ConvB { enum { Result = (X==1) ? 1 : (X+N) }; };  template &lt;class A, class B&gt; struct EImpl { private:     typedef typename Map&lt;typename A::Result, A::Count, NullType, ConvA&gt;::Result A1;     typedef typename Map&lt;typename B::Result, A::Count, NullType, ConvB&gt;::Result B1;   public:     typedef typename Append&lt;A1,B1&gt;::Result Result;     enum {Count = A::Count+B::Count}; }; template &lt;class T1, class T2, class T3 = NullType, class T4 = NullType, class T5 = NullType&gt; struct E: public EImpl&lt;T1, E&lt;T2,T3,T4,T5&gt; &gt; {}; template &lt;class T1, class T2&gt; struct E&lt;T1,T2,NullType,NullType,NullType&gt;: public EImpl&lt;T1,T2&gt; {}; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0443\u0433\u0438 \u043d\u0435 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f, \u0430 \u0433\u0440\u0430\u0444\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0449\u0435\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u043e\u0439 (\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u044f B \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0434\u043b\u044f A).<\/p>\n<p>  \u0421\u0430\u043c\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u0432\u0430\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \/T*\/:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/1.bp.blogspot.com\/-ZfAs3f4wc_A\/UI5wKb_ojII\/AAAAAAAAAKM\/rky8e2hmNvQ\/s1600\/0005.PNG\" alt=\"image\"\/><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Q<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template &lt;class T, int Min = 0, int Max = 0&gt; struct Q {   Q() {STATIC_ASSERT(Min&lt;=Max, Q_Spec);}  private:   typedef typename Map&lt;typename T::Result, T::Count, NullType, ConvA&gt;::Result A1;   typedef typename Map&lt;typename Q&lt;T,Min,Max-1&gt;::Result,T::Count,NullType,ConvB&gt;::Result B1;  public:   typedef typename Edge&lt;typename Append&lt;A1,B1&gt;::Result,0,T::Count&gt; Result;   enum {Count = T::Count+Q&lt;T,Min,Max-1&gt;::Count}; }; template &lt;class T, int N&gt; struct Q&lt;T,N,N&gt; { private:   typedef typename Map&lt;typename T::Result, T::Count, NullType, ConvA&gt;::Result A1;   typedef typename Map&lt;typename Q&lt;T,N-1,N-1&gt;::Result, T::Count, NullType, ConvB&gt;::Result B1;  public:   typedef typename Append&lt;A1,B1&gt;::Result Result;   enum {Count = T::Count+Q&lt;T,N-1,N-1&gt;::Count}; }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u0432\u0430\u043d\u0442\u0438\u0444\u0438\u0430\u043a\u0442\u043e\u0440\u044b \/T{1}\/ \u0438 \/T{0,1}\/, \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Q<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template &lt;class T&gt; struct Q&lt;T,1,1&gt;: public T {}; template &lt;class T&gt; struct Q&lt;T,0,0&gt; { private:     typedef typename Edge&lt;typename Map&lt;typename T::Result,2,NullType,Add&gt;::Result,0,2&gt; N0;     typedef typename Edge&lt;N0,3,1&gt; N1;     typedef typename Edge&lt;N1,3,2&gt; N2;   public:     typedef typename Edge&lt;N2,0,1&gt; Result;     enum {Count = T::Count+2}; }; template &lt;class T&gt; struct Q&lt;T,1,0&gt; { public:     typedef typename Edge&lt;typename T::Result,1,0&gt; Result;     enum {Count = T::Count}; }; template &lt;class T&gt; struct Q&lt;T,0,1&gt; { public:     typedef typename Edge&lt;typename T::Result,0,1&gt; Result;     enum {Count = T::Count}; }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u041d\u041a\u0410, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \/(a|b)*aab\/, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u043a\u043d\u0438\u0433\u0435:<\/p>\n<pre><code class=\"cpp\">typedef E&lt; Q&lt; D&lt; C&lt;'a'&gt;, C&lt;'b'&gt; &gt; &gt;, C&lt;'a'&gt;, C&lt;'b'&gt;, C&lt;'b'&gt; &gt;::Result G; <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0414\u041a\u0410:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">DFA<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">enum CONSTS {    MAX_FIN_STATE = 9 };  template &lt;class Graph&gt; class DFAImpl; template &lt;class T, int Src, int Dst, char Chr&gt; class DFAImpl&lt;Edge&lt;T,Src,Dst,Chr&gt; &gt;: public DFAImpl&lt;typename T&gt; { public:     typedef typename    DFAImpl&lt;typename T&gt;::ResultType ResultType;     ResultType          Parse(char C)     {       if ((State==Src)&&(C==Chr)) {            State = Dst;            if (State&lt;MAX_FIN_STATE) {                State = 0;                return rtSucceed;            }            return rtNotCompleted;       }       return DFAImpl&lt;typename T&gt;::Parse(C);     }     void Dump(void) {T::Dump();} }; template &lt;&gt; class DFAImpl&lt;NullType&gt; { public:     DFAImpl():          State(0) {}     enum ResultType {        rtNotCompleted = 0,        rtSucceed      = 1,        rtFailed       = 2     };     ResultType          Parse(char C)     {  State = 0;        return rtFailed;     }   protected:     int                 State; };  \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0445\u043e\u0434\u0430 (\u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439) \u0438\u0437 \u0432\u0435\u0440\u0448\u0438\u043d\u044b (\u041f\u0440\u0438 a==0 - e-\u0445\u043e\u0434)  \/\/ N - \u0423\u0437\u0435\u043b \/\/ T - \u0413\u0440\u0430\u0444 \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \/\/ a - \u0421\u0438\u043c\u0432\u043e\u043b \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430 template &lt;int N, class T, class R, int a = 0&gt; struct Move; template &lt;int N, class R, int a&gt; struct Move&lt;N,NullType,R,a&gt; {typedef R Result;}; template &lt;int N, class T, int D, class R, int a&gt; struct Move&lt;N,Edge&lt;T,N,D,a&gt;,R,a&gt; { typedef typename Move&lt;N,T,typename AddSet&lt;D,R,NullType&gt;::Result,a&gt;::Result Result; }; template &lt;int N, int M, class T, int D, class R, int a, int b&gt;  struct Move&lt;N,Edge&lt;T,M,D,b&gt;,R,a&gt; { typedef typename Move&lt;N,T,R,a&gt;::Result Result; };  \/\/ \u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044e F \/\/ T - \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a (Set, StateListEx) \/\/ \u0421 - \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0430 F \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a (Set, StateListEx) \/\/ F - \u041f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 (Exist, NotExist, Important) template &lt;class T, class C, class R, template &lt;int,class&gt; class F&gt; struct Filter; template &lt;class C, class R, template &lt;int,class&gt; class F&gt;  struct Filter&lt;NullType,C,R,F&gt; {typedef R Result;}; template &lt;int N, class T, class C, class R, template &lt;int,class&gt; class F&gt;  struct Filter&lt;Set&lt;N,T&gt;,C,R,F&gt; { typedef typename If&lt;F&lt;N,C&gt;::Result,                       typename Filter&lt;T,C,typename Set&lt;N,R&gt;,F&gt;::Result,                       typename Filter&lt;T,C,R,F&gt;::Result                      &gt;::Result Result; }; template &lt;int Src, int Dst, int a, class S, class T, class C, class R, template &lt;int,class&gt; class F&gt;  struct Filter&lt;StateListEx&lt;Src,Dst,a,S,T&gt;,C,R,F&gt; { typedef typename If&lt;F&lt;Dst,C&gt;::Result,                       typename Filter&lt;T,C,typename StateListEx&lt;Src,Dst,a,S,R&gt;,F&gt;::Result,                       typename Filter&lt;T,C,R,F&gt;::Result                      &gt;::Result Result; };  \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 e-\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f \/\/ T - \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0437\u043b\u043e\u0432 \/\/ G - \u0413\u0440\u0430\u0444 \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0437\u043b\u043e\u0432 template &lt;class T, class G, class R&gt; struct EClos; template &lt;class G, class R&gt; struct EClos&lt;NullType,G,R&gt; {typedef R Result;}; template &lt;int N, class T, class G, class R&gt;  struct EClos&lt;Set&lt;N,T&gt;,G,R&gt; { private:     typedef typename Move&lt;N,G,NullType&gt;::Result L;     typedef typename Filter&lt;L,typename Append&lt;T,R&gt;::Result,NullType,NotExist&gt;::Result F;   public:     typedef typename EClos&lt;typename Append&lt;T,F&gt;::Result,G,                            typename Set&lt;N,R&gt;                           &gt;::Result Result; };  \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0445\u043e\u0434\u0430 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0432\u0435\u0440\u0448\u0438\u043d \/\/ T - \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \/\/ G - \u0413\u0440\u0430\u0444 \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \/\/ a - \u0421\u0438\u043c\u0432\u043e\u043b \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430 template &lt;class T, class G, class R, int a&gt; struct MoveSet; template &lt;class G, class R, int a&gt; struct MoveSet&lt;NullType,G,R,a&gt; {typedef R Result;}; template &lt;int N, class T, class G, class R, int a&gt;  struct MoveSet&lt;Set&lt;N,T&gt;,G,R,a&gt; { typedef typename MoveSet&lt;T,G,typename Join&lt;R,typename Move&lt;N,G,NullType,a&gt;::Result&gt;::Result,a&gt;::Result Result; };  \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0432\u0441\u0435\u043c\u0438 \u0445\u043e\u0434\u0430\u043c\u0438 \u0438\u0437 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \/\/ N - \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0443\u0437\u043b\u043e\u0432 \/\/ K - \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \/\/ T - \u0410\u043b\u0444\u0430\u0432\u0438\u0442 \/\/ n - \u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b \/\/ S - \u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (Set) \/\/ G - \u0413\u0440\u0430\u0444 \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 template &lt;int N, int K, class T, int n, class S, class G, class R&gt; struct MoveList; template &lt;int N, int K, int n, class S, class G, class R&gt;  struct MoveList&lt;N,K,NullType,n,S,G,R&gt; {typedef R Result;}; template &lt;int N, int K, int a, class T, int n, class S, class G, class R&gt;  struct MoveList&lt;N,K,Set&lt;a,T&gt;,n,S,G,R&gt; { private:     typedef typename MoveSet&lt;S,G,NullType,a&gt;::Result S0;     typedef typename EClos&lt;S0,G,NullType&gt;::Result S1;     enum { N1 = (NotExist&lt;1,S1&gt;::Result)?K:N };   public:     typedef typename MoveList&lt;(N==N1)?(N+1):N,                               (K==N1)?(K+1):K,                               T,n,S,G,                               StateListEx&lt;n,N1,a,S1,R&gt; &gt;::Result Result; };  \/\/ \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430 \u044f\u0437\u044b\u043a\u0430 \u043f\u043e \u0433\u0440\u0430\u0444\u0443 NFA (\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435) \/\/ T - \u0413\u0440\u0430\u0444 \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0430\u043b\u0444\u0430\u0432\u0438\u0442 template &lt;class T, class R&gt; struct Alf; template &lt;class R&gt; struct Alf&lt;NullType,R&gt; {typedef R Result;}; template &lt;class T, int S, int D, class R&gt; struct Alf&lt;Edge&lt;T,S,D,0&gt;,R&gt; {     typedef typename Alf&lt;T,R&gt;::Result Result; }; template &lt;class T, int S, int D, int a, class R&gt; struct Alf&lt;Edge&lt;T,S,D,a&gt;,R&gt;{      typedef typename Alf&lt;T, typename AddSet&lt;a,R,NullType&gt;::Result&gt;::Result Result; };  \/\/ \u0418\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0443\u0437\u043b\u043e\u0432 \/\/ T - \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 (StateListEx) \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \/\/ F - \u041f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 (Exist, NotExist) template &lt;class T, int R, template &lt;int,class&gt; class F&gt; struct Incr; template &lt;int R, template &lt;int,class&gt; class F&gt;  struct Incr&lt;NullType,R,F&gt; {enum {Result = R};}; template &lt;int Src, int N, int a, class S, class T, int R, template &lt;int,class&gt; class F&gt;  struct Incr&lt;StateListEx&lt;Src,N,a,S,T&gt;,R,F&gt; { enum { Result = Incr&lt;T, (F&lt;1,S&gt;::Result)?((N&gt;=R)?(N+1):R):R, F&gt;::Result}; };  \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \/\/ N - \u0423\u0437\u0435\u043b \/\/ G - \u0413\u0440\u0430\u0444 template &lt;int N, class G&gt; struct Important; template &lt;int N&gt; struct Important&lt;N,NullType&gt; {enum {Result = (N==1)};}; template &lt;int N, class T, int D&gt;  struct Important&lt;N,Edge&lt;T,N,D,0&gt; &gt; {     enum { Result = Important&lt;N,T&gt;::Result }; }; template &lt;int N, class T, int D, int C&gt;  struct Important&lt;N,Edge&lt;T,N,D,C&gt; &gt; {     enum {Result = true}; }; template &lt;int N, class T, int S, int D, int C&gt;  struct Important&lt;N,Edge&lt;T,S,D,C&gt; &gt; {     enum { Result = Important&lt;N,T&gt;::Result }; };  \/\/ \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \/\/ T - \u0413\u0440\u0430\u0444 \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a template &lt;class T, class R&gt; struct ImportantOpt; template &lt;class R&gt; struct ImportantOpt&lt;NullType,R&gt; {     typedef typename AddSet&lt;1,R,NullType&gt;::Result Result; }; template &lt;class T, int S, int D, class R&gt;  struct ImportantOpt&lt;Edge&lt;T,S,D,0&gt;,R&gt;{      typedef typename ImportantOpt&lt;T,R&gt;::Result Result; }; template &lt;class T, int S, int D, int C, class R&gt;  struct ImportantOpt&lt;Edge&lt;T,S,D,C&gt;,R&gt; {      typedef typename ImportantOpt&lt;T,typename AddSet&lt;S,R,NullType&gt;::Result&gt;::Result Result; };  \/\/ \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043f\u043e \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \/\/ A - \u0421\u043f\u0438\u0441\u043e\u043a \u0443\u0437\u043b\u043e\u0432 (Set) \/\/ B - \u0421\u043f\u0438\u0441\u043e\u043a \u0443\u0437\u043b\u043e\u0432 (Set) \/\/ G - \u0413\u0440\u0430\u0444 \/\/ I - \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 (\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435) template &lt;class A, class B, class G&gt; struct EquEx { private:     typedef typename Filter&lt;A,G,NullType,Important&gt;::Result A1;     typedef typename Filter&lt;B,G,NullType,Important&gt;::Result B1;   public:     enum { Result = Equ&lt;A1,B1&gt;::Result }; }; template &lt;class A, class B, class I&gt; struct EquExOpt { private:     typedef typename Filter&lt;A,I,NullType,Exist&gt;::Result A1;     typedef typename Filter&lt;B,I,NullType,Exist&gt;::Result B1;   public:     enum { Result = Equ&lt;A1,B1&gt;::Result }; };  \/\/ \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0443\u0437\u043b\u043e\u0432 \/\/ G - \u0413\u0440\u0430\u0444 \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a template &lt;class T, class R&gt; struct EdgeList; template &lt;class R&gt;  struct EdgeList&lt;NullType,R&gt; {typedef R Result;}; template &lt;class T, int S, int D, int C, class R&gt;  struct EdgeList&lt;Edge&lt;T,S,D,C&gt;,R&gt; { private:     typedef typename AddSet&lt;S,R, NullType&gt;::Result R0;     typedef typename AddSet&lt;D,R0,NullType&gt;::Result R1;   public:     typedef typename EdgeList&lt;T,R1&gt;::Result Result; };  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f (\u043f\u043e \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439) \/\/ T - \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a (StateList) \/\/ S - \u0418\u0441\u043a\u043e\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (Set) \/\/ I - \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 template &lt;class T, class S, class I&gt; struct ExistS; template &lt;class S, class I&gt;  struct ExistS&lt;NullType,S,I&gt; {enum {Result = false};}; template &lt;int N, class s, class T, class S, class I&gt;  struct ExistS&lt;StateList&lt;N,s,T&gt;,S,I&gt; { enum { Result = (Equ&lt;s,S&gt;::Result) ? \/\/ EquExOpt&lt;s,S,I&gt;::Result                   true :                   ExistS&lt;T,S,I&gt;::Result        }; };  \/\/ \u041e\u0442\u0431\u0440\u043e\u0441 \u0440\u0430\u043d\u0435\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \/\/ T - \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a (StateListEx) \/\/ \u0421 - \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a (StateList) \/\/ I - \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 (Set) \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a (StateListEx) template &lt;class T, class C, class I, class R&gt; struct FilterT; template &lt;class C, class I, class R&gt;  struct FilterT&lt;NullType,C,I,R&gt; {typedef R Result;}; template &lt;int Src, int Dst, int a, class S, class T, class C, class I, class R&gt;  struct FilterT&lt;StateListEx&lt;Src,Dst,a,S,T&gt;,C,I,R&gt; { typedef typename If&lt;ExistS&lt;C,S,I&gt;::Result,                       typename FilterT&lt;T,C,I,R&gt;::Result,                       typename FilterT&lt;T,C,I,StateListEx&lt;Src,Dst,a,S,R&gt; &gt;::Result                      &gt;::Result Result; };  \/\/ \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0430 \/\/ T - \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u043d\u0435\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d (StateList) \/\/ a - \u0421\u0438\u043c\u0432\u043e\u043b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043a \u0438\u0441\u043a\u043e\u043c\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \/\/ S - \u0418\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (Set) \/\/ I - \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \/\/ R - \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0433\u0440\u0430\u0444 template &lt;class T, int Src, int Dst, int a, class S, class I, class R&gt; struct GenImpl; template &lt;int Src, int Dst, int a, class S, class I, class R&gt;  struct GenImpl&lt;NullType,Src,Dst,a,S,I,R&gt; {typedef R Result;}; template &lt;int n, class s, class T, int Src, int Dst, int a, class S, class I, class R&gt;  struct GenImpl&lt;StateList&lt;n,s,T&gt;,Src,Dst,a,S,I,R&gt; { typedef typename If&lt;Equ&lt;s,S&gt;::Result, \/\/ EquExOpt&lt;s,S,I&gt;                       Edge&lt;R,Src,n,a&gt;,                       typename GenImpl&lt;T,Src,Dst,a,S,I,R&gt;::Result                      &gt;::Result Result; };  \/\/ \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0430 \/\/ T - \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u043e\u0432\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \/\/ \u0421 - \u0420\u0430\u043d\u0435\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \/\/ I - \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0433\u0440\u0430\u0444 template &lt;class T, class C, class I, class R&gt; struct Gen; template &lt;class C, class I, class R&gt;  struct Gen&lt;NullType,C,I,R&gt; {typedef R Result;}; template &lt;int Src, int Dst, int a,class S, class T, class C, class I, class R&gt;  struct Gen&lt;StateListEx&lt;Src,Dst,a,S,T&gt;,C,I,R&gt; {      typedef typename Gen&lt;T,C,I,typename GenImpl&lt;C,Src,Dst,a,S,I,R&gt;::Result&gt;::Result Result; };  \/\/ \u0428\u0430\u0433 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \/\/ N - \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 \/\/ K - \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \/\/ G - \u0413\u0440\u0430\u0444 (NFA) \/\/ A - \u0410\u043b\u0444\u0430\u0432\u0438\u0442 (Set) \/\/ I - \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 (Set) \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0433\u0440\u0430\u0444 (DFA) \/\/ M - \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 (StateList) \/\/ D - \u0421\u043f\u0438\u0441\u043e\u043a \u043d\u0435\u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 (StateListEx) template &lt;int N, int K, class G, class A, class I, class R, class M, class D&gt; struct ConvertImpl; template &lt;int N, int K, class G, class A, class I, class R, class M&gt;  struct ConvertImpl&lt;N,K,G,A,I,R,M,NullType&gt; {typedef R Result;}; template &lt;int N, int K, class G, class A, class I, class R, class M, int Src, int Dst, int a, class S, class D&gt;  struct ConvertImpl&lt;N,K,G,A,I,R,M,StateListEx&lt;Src,Dst,a,S,D&gt; &gt; { private:     typedef typename MoveList&lt;N,K,A,Dst,S,G,NullType&gt;::Result T;     typedef typename StateList&lt;Dst,S,M&gt; M1;     typedef typename Append&lt;D,M1&gt;::Result MD;     typedef typename FilterT&lt;T,MD,I,NullType&gt;::Result T1;     typedef typename AppendSafe&lt;T1,D&gt;::Result D1;     typedef typename Gen&lt;T,typename Append&lt;T1,MD&gt;::Result,I,R&gt;::Result R1;     enum { N1 = Incr&lt;T1,N,Exist&gt;::Result,            K1 = Incr&lt;T1,K,NotExist&gt;::Result          };   public:     typedef typename ConvertImpl&lt;N1,K1,G,A,I,R1,M1,D1&gt;::Result Result; };  \/\/ \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 NFA -&gt; DFA \/\/ G - \u0413\u0440\u0430\u0444 \/\/ R - \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0433\u0440\u0430\u0444 template &lt;class G, class R&gt; struct Convert { private:     typedef typename Alf&lt;G,NullType&gt;::Result A;     typedef typename ImportantOpt&lt;G,NullType&gt;::Result I;   public:     typedef typename ConvertImpl&lt;1,MAX_FIN_STATE+1,G,A,I,NullType,NullType,                                  StateListEx&lt;0,0,0,typename EClos&lt;Set&lt;0,NullType&gt;,G,NullType&gt;::Result,NullType&gt; &gt;::Result Result; };  template &lt;class T&gt; class DFA: public DFAImpl&lt;typename Convert&lt;typename T::Result,NullType&gt;::Result&gt; {}; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043c\u044b\u0442\u0430\u0440\u0441\u0442\u0432\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u0438\u043b\u0438 \u043e\u0434\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u043e\u0432\u044b\u0435 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0438 \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438), \u0437\u0430\u043c\u0435\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u00ab\u043b\u043e\u0431\u043e\u0432\u0430\u044f\u00bb \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432\u0435\u0448\u0430\u043b\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u043f\u0440\u043e\u0447\u044c, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d ImportantOpt.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">    typedef E&lt; Q&lt; D&lt; C&lt;'a'&gt;, C&lt;'b'&gt; &gt; &gt;, C&lt;'a'&gt;, C&lt;'b'&gt;, C&lt;'b'&gt; &gt;::Result G;     typedef Convert&lt;G,NullType&gt;::Result R;     R::Dump(); <\/code><\/pre>\n<p>  \u2026 \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>  1 -a-&gt;  10   1 -b-&gt;  11  13 -a-&gt;  10  13 -b-&gt;   1  10 -a-&gt;  10  10 -b-&gt;  13  11 -a-&gt;  10  11 -b-&gt;  11   0 -a-&gt;  10   0 -b-&gt;  11 <\/code><\/pre>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0441\u043a\u043e\u043c\u043e\u043c\u0443 \u0433\u0440\u0430\u0444\u0443 \u0414\u041a\u0410:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/3.bp.blogspot.com\/-YlGLgAuaN08\/UI5psiSWoKI\/AAAAAAAAAJo\/kOjTq_zBUJY\/s1600\/0002.PNG\" alt=\"image\"\/>       \t \t\t   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/179089\/\"> http:\/\/habrahabr.ru\/post\/179089\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0414\u0430\u0432\u043d\u044b\u043c-\u0434\u0430\u0432\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0430\u0432\u0430 \u0431\u044b\u043b\u0430 \u0437\u0435\u043b\u0435\u043d\u0435\u0435, \u0430 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0432\u044b\u0448\u0435, \u0436\u0438\u043b-\u0431\u044b\u043b \u0442\u0440\u043e\u043b\u043b\u044c, \u043f\u043e \u0438\u043c\u0435\u043d\u0438 Xenocephal. \u0416\u0438\u043b \u043e\u043d, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u043d\u043e \u043c\u043d\u0435 \u043f\u043e\u0432\u0435\u0437\u043b\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u043c <a href=\"http:\/\/www.sql.ru\/forum\/afsearch.aspx?s=Xenocephal\">\u0444\u043e\u0440\u0443\u043c\u0435<\/a>, \u0433\u0434\u0435 \u044f, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043d\u0430\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0443\u043c\u0430-\u0440\u0430\u0437\u0443\u043c\u0430. \u042f \u0443\u0436\u0435 \u043d\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u044e \u0442\u043e\u043f\u0438\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0442\u0435\u043a\u0430\u043b\u0430 \u0431\u0435\u0441\u0435\u0434\u0430, \u043d\u043e \u0441\u0443\u0442\u044c \u0435\u0435 \u0441\u0432\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e Xenocephal \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0443\u0431\u0435\u0434\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0445, \u0447\u0442\u043e Lisp (\u0441 \u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438) \u2014 \u0432\u0441\u0435\u043c\u0443 \u0433\u043e\u043b\u043e\u0432\u0430, \u0430 C++, \u0441 \u0435\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438, \u0436\u0430\u043b\u043a\u043e\u0435 \u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u043b\u0435\u0432\u043e\u0439 \u0440\u0443\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430\u043c\u0435\u0442\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u043d\u0430\u0431\u0438\u0432\u0448\u0435\u0433\u043e \u043e\u0441\u043a\u043e\u043c\u0438\u043d\u0443 <a href=\"http:\/\/www.solarix.ru\/for_developers\/cpp\/snippets\/factorial.shtml\">\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u0430<\/a> \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-179089","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/179089","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=179089"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/179089\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=179089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=179089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=179089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}