Latex代码测试

这篇博客主要介绍了如何使用LaTeX进行字符串匹配算法的实现,包括SAM、AAM和BAM算法,并展示了大整数的加减乘除运算。通过代码示例,阐述了字符串匹配的原理以及大整数运算的处理方法,适合对算法和数学计算感兴趣的读者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# i n c l u d e &lt; q u e u e &gt; \#include&lt;queue&gt; #include<queue>
# i n c l u d e &lt; s t d i o . h &gt; \#include&lt;stdio.h&gt; #include<stdio.h>
# i n c l u d e &lt; s t r i n g . h &gt; \#include&lt;string.h&gt; #include<string.h>
# i n c l u d e &lt; a l g o r i t h m &gt; \#include&lt;algorithm&gt; #include<algorithm>
# d e f i n e   N   4010 \#define\ N\ 4010 #define N 4010
u s i n g   n a m e s p a c e   s t d ; using\ namespace\ std; using namespace std;
s t r u c t   V {   i n t   x , y , d ;   }   z ; struct\ V\{\ int\ x,y,d;\ \}\ z; struct V{ int x,y,d; } z;
c h a r   A [ N ] , B [ N ] ;   i n t   n , m , l [ N ] , f [ N ] [ N ] ;   q u e u e &lt; V &gt;   q ; char\ A[N],B[N];\ int\ n,m,l[N],f[N][N];\ queue&lt;V&gt;\ q; char A[N],B[N]; int n,m,l[N],f[N][N]; queue<V> q;
n a m e s p a c e   S A M { namespace\ SAM\{ namespace SAM{
i n t   s [ N ] [ 26 ] , m x [ N ] , f [ N ] , c n t = 1 , l s t = 1 ; \quad int\ s[N][26],mx[N],f[N],cnt=1,lst=1; int s[N][26],mx[N],f[N],cnt=1,lst=1;
i n l i n e   i n t   e x t e n d ( i n t   c ) { \quad inline\ int\ extend(int\ c)\{ inline int extend(int c){
i n t   p = l s t , n p = l s t = + + c n t , q , n q ; \quad \quad int\ p=lst,np=lst=++cnt,q,nq; int p=lst,np=lst=++cnt,q,nq;
m x [ n p ] = m x [ p ] + 1 ; \quad \quad mx[np]=mx[p]+1; mx[np]=mx[p]+1;
f o r ( ; p &amp; &amp; ! s [ p ] [ c ] ; p = f [ p ] )   s [ p ] [ c ] = n p ; \quad \quad for(;p\&amp;\&amp;!s[p][c];p=f[p])\ s[p][c]=np; for(;p&&!s[p][c];p=f[p]) s[p][c]=np;
i f ( ! p )   r e t u r n   f [ n p ] = 1 ; \quad \quad if(!p)\ return\ f[np]=1; if(!p) return f[np]=1;
q = s [ p ] [ c ] ; \quad \quad q=s[p][c]; q=s[p][c];
i f ( m x [ q ] = = m x [ p ] + 1 )   f [ n p ] = q ; \quad \quad if(mx[q]==mx[p]+1)\ f[np]=q; if(mx[q]==mx[p]+1) f[np]=q;
e l s e { \quad \quad else\{ else{
n q = + + c n t ; \quad \quad \quad nq=++cnt; nq=++cnt;
m x [ n q ] = m x [ p ] + 1 ; \quad \quad \quad mx[nq]=mx[p]+1; mx[nq]=mx[p]+1;
f [ n q ] = f [ q ] ;   f [ q ] = f [ n p ] = n q ; \quad \quad \quad f[nq]=f[q];\ f[q]=f[np]=nq; f[nq]=f[q]; f[q]=f[np]=nq;
m e m c p y ( s [ n q ] , s [ q ] , 26 &lt; &lt; 2 ) ; \quad \quad \quad memcpy(s[nq],s[q],26&lt;&lt;2); memcpy(s[nq],s[q],26<<2);
f o r ( ; p &amp; &amp; s [ p ] [ c ] = = q ; p = f [ p ] )   s [ p ] [ c ] = n q ; \quad \quad \quad for(;p\&amp;\&amp;s[p][c]==q;p=f[p])\ s[p][c]=nq; for(;p&&s[p][c]==q;p=f[p]) s[p][c]=nq;
} \quad \quad \} }
} \quad \} }
i n l i n e   v o i d   m a t c h ( ) { \quad inline\ void\ match()\{ inline void match(){
f o r ( i n t   x = 1 , i = 1 , c = 0 ; i &lt; = n ; + + i ) { \quad \quad for(int\ x=1,i=1,c=0;i&lt;=n;++i)\{ for(int x=1,i=1,c=0;i<=n;++i){
f o r ( ; x &gt; 1   &amp; &amp;   ! s [ x ] [ A [ i ] − ′ a ′ ] ; x = f [ x ] ) ; \quad \quad \quad for(;x&gt;1\ \&amp;\&amp;\ !s[x][A[i]-&#x27;a&#x27;];x=f[x]); for(;x>1 && !s[x][A[i]a];x=f[x]);
c = m x [ x ] ; \quad \quad \quad c=mx[x]; c=mx[x];
i f ( ! s [ x ] [ A [ i ] − ′ a ′ ] )   l [ i ] = 0 ;   e l s e { \quad \quad \quad if(!s[x][A[i]-&#x27;a&#x27;])\ l[i]=0;\ else\{ if(!s[x][A[i]a]) l[i]=0; else{
x = s [ x ] [ A [ i ] − ′ a ′ ] ;   l [ i ] = + + c ; \quad \quad \quad \quad x=s[x][A[i]-&#x27;a&#x27;];\ l[i]=++c; x=s[x][A[i]a]; l[i]=++c;
} \quad \quad \quad \} }
} \quad \quad \} }
} \quad \} }
} \} }
n a m e s p a c e   A A M { namespace\ AAM\{ namespace AAM{
i n t   s [ N ] [ 26 ] ; \quad int\ s[N][26]; int s[N][26];
i n l i n e   v o i d   b u i l d ( ) { \quad inline\ void\ build()\{ inline void build(){
f o r ( i n t   i = 1 ; i &lt; = n ; + + i ) \quad \quad for(int\ i=1;i&lt;=n;++i) for(int i=1;i<=n;++i)
f o r ( i n t   j = i − 1 ; ; − − j ) { \quad \quad \quad for(int\ j=i-1;;--j)\{ for(int j=i1;;j){
s [ j ] [ A [ i ] − ′ a ′ ] = i ; \quad \quad \quad \quad s[j][A[i]-&#x27;a&#x27;]=i; s[j][A[i]a]=i;
i f ( A [ j ] = = A [ i ]   ∣ ∣   ! j )   b r e a k ; \quad \quad \quad \quad if(A[j]==A[i]\ ||\ !j)\ break; if(A[j]==A[i]  !j) break;
} \quad \quad \quad \} }
} \quad \} }
} \} }
n a m e s p a c e   B A M { namespace\ BAM\{ namespace BAM{
i n t   s [ N ] [ 26 ] ; \quad int\ s[N][26]; int s[N][26];
i n l i n e   v o i d   b u i l d ( ) { \quad inline\ void\ build()\{ inline void build(){
f o r ( i n t   i = 1 ; i &lt; = m ; + + i ) \quad \quad for(int\ i=1;i&lt;=m;++i) for(int i=1;i<=m;++i)
f o r ( i n t   j = i − 1 ; ; − − j ) { \quad \quad \quad for(int\ j=i-1;;--j)\{ for(int j=i1;;j){
s [ j ] [ B [ i ] − ′ a ′ ] = i ; \quad \quad \quad \quad s[j][B[i]-&#x27;a&#x27;]=i; s[j][B[i]a]=i;
i f ( B [ j ] = = B [ i ]   ∣ ∣   ! j )   b r e a k ; \quad \quad \quad \quad if(B[j]==B[i]\ ||\ !j)\ break; if(B[j]==B[i]  !j) break;
} \quad \quad \quad \} }
} \quad \} }
} \} }
i n l i n e   v o i d   d f s ( i n t   x , i n t   y , i n t   d ) { inline\ void\ dfs(int\ x,int\ y,int\ d)\{ inline void dfs(int x,int y,int d){
f o r ( i n t   i = 0 ; i &lt; 26 ; + + i ) \quad for(int\ i=0;i&lt;26;++i) for(int i=0;i<26;++i)
i f ( A A M : : s [ x ] [ i ] &amp; &amp; ! S A M : : s [ y ] [ i ] ) { \quad \quad if(AAM::s[x][i]\&amp;\&amp;!SAM::s[y][i])\{ if(AAM::s[x][i]&&!SAM::s[y][i]){
∗ l = m i n ( ∗ l , d + 1 ) ;   r e t u r n ; \quad \quad \quad *l=min(*l,d+1);\ return; l=min(l,d+1); return;
} \quad \quad \} }
f o r ( i n t   i = 0 ; i &lt; 26 ; + + i ) \quad for(int\ i=0;i&lt;26;++i) for(int i=0;i<26;++i)
i f ( A A M : : s [ x ] [ i ] &amp; &amp; S A M : : s [ y ] [ i ] ) \quad \quad if(AAM::s[x][i]\&amp;\&amp;SAM::s[y][i]) if(AAM::s[x][i]&&SAM::s[y][i])
d f s ( A A M : : s [ x ] [ i ] , S A M : : s [ y ] [ i ] , d + 1 ) ; \quad \quad \quad dfs(AAM::s[x][i],SAM::s[y][i],d+1); dfs(AAM::s[x][i],SAM::s[y][i],d+1);
} \} }
i n t   m a i n ( ) { int\ main()\{ int main(){
s c a n f ( &quot; % s % s &quot; , A + 1 , B + 1 ) ; \quad scanf(&quot;\%s\%s&quot;,A+1,B+1); scanf("%s%s",A+1,B+1);
n = s t r l e n ( A + 1 ) ;   m = s t r l e n ( B + 1 ) ; \quad n=strlen(A+1);\ m=strlen(B+1); n=strlen(A+1); m=strlen(B+1);
f o r ( i n t   i = 1 ; i &lt; = n ; + + i )   S A M : : e x t e n d ( B [ i ] − ′ a ′ ) ; \quad for(int\ i=1;i&lt;=n;++i)\ SAM::extend(B[i]-&#x27;a&#x27;); for(int i=1;i<=n;++i) SAM::extend(B[i]a);
S A M : : m a t c h ( ) ; \quad SAM::match(); SAM::match();
A A M : : b u i l d ( ) ;   B A M : : b u i l d ( ) ; \quad AAM::build();\ BAM::build(); AAM::build(); BAM::build();
∗ l = n ;   f o r ( i n t   i = 1 ; i &lt; = n ; + + i )   i f ( l [ i ] &lt; i )   ∗ l = m i n ( ∗ l , l [ i ] + 1 ) ; \quad *l=n;\ for(int\ i=1;i&lt;=n;++i)\ if(l[i]&lt;i)\ *l=min(*l,l[i]+1); l=n; for(int i=1;i<=n;++i) if(l[i]<i) l=min(l,l[i]+1);
p r i n t f ( &quot; % d \ n &quot; , ∗ l ) ;   ∗ l = n ; \quad printf(&quot;\%d\backslash n&quot;,*l);\ *l=n; printf("%d\n",l); l=n;
f o r ( i n t   i = 1 ; i &lt; = n ; + + i ) { \quad for(int\ i=1;i&lt;=n;++i)\{ for(int i=1;i<=n;++i){
i n t   x = 0 ; \quad \quad int\ x=0; int x=0;
f o r ( i n t   j = i ; j &lt; = n ; + + j ) { \quad \quad for(int\ j=i;j&lt;=n;++j)\{ for(int j=i;j<=n;++j){
x = B A M : : s [ x ] [ A [ j ] − ′ a ′ ] ; \quad \quad \quad x=BAM::s[x][A[j]-&#x27;a&#x27;]; x=BAM::s[x][A[j]a];
i f ( ! x ) {   ∗ l = m i n ( ∗ l , j − i + 1 ) ;   b r e a k ;   } \quad \quad \quad if(!x)\{\ *l=min(*l,j-i+1);\ break;\ \} if(!x){ l=min(l,ji+1); break; }
} \quad \quad \} }
} \quad \} }
p r i n t f ( &quot; % d \ n &quot; , ∗ l ) ;   d f s ( 0 , 1 , 0 ) ; \quad printf(&quot;\%d\backslash n&quot;,*l);\ dfs(0,1,0); printf("%d\n",l); dfs(0,1,0);
p r i n t f ( &quot; % d \ n &quot; , ∗ l ) ;   ∗ l = n ; \quad printf(&quot;\%d\backslash n&quot;,*l);\ *l=n; printf("%d\n",l); l=n;
q . p u s h ( ( V ) { 0 , 0 , 0 } ) ; \quad q.push((V)\{0,0,0\}); q.push((V){0,0,0});
f o r ( i n t   x , y , d ; ! q . e m p t y ( ) ; q . p o p ( ) ) { \quad for(int\ x,y,d;!q.empty();q.pop())\{ for(int x,y,d;!q.empty();q.pop()){
z = q . f r o n t ( ) ; \quad \quad z=q.front(); z=q.front();
f o r ( i n t   i = 0 ; i &lt; 26 ; + + i ) i f ( x = A A M : : s [ z . x ] [ i ] ) { \quad \quad for(int\ i=0;i&lt;26;++i)if(x=AAM::s[z.x][i])\{ for(int i=0;i<26;++i)if(x=AAM::s[z.x][i]){
i f ( ! ( y = B A M : : s [ z . y ] [ i ] ) ) {   p r i n t f ( &quot; % d \ n &quot; , z . d + 1 ) ;   r e t u r n   0 ;   } \quad \quad \quad if(!(y=BAM::s[z.y][i]))\{\ printf(&quot;\%d\backslash n&quot;,z.d+1);\ return\ 0;\ \} if(!(y=BAM::s[z.y][i])){ printf("%d\n",z.d+1); return 0; }
e l s e   i f ( ! f [ x ] [ y ] ) {   f [ x ] [ y ] = 1 ;   q . p u s h ( ( V ) { x , y , z . d + 1 } ) ;   } \quad \quad \quad else\ if(!f[x][y])\{\ f[x][y]=1;\ q.push((V)\{x,y,z.d+1\});\ \} else if(!f[x][y]){ f[x][y]=1; q.push((V){x,y,z.d+1}); }
} \quad \quad \} }
} \quad \} }
} \} }


# i n c l u d e   &lt; c s t d i o &gt; \#include\ &lt;cstdio&gt; #include <cstdio>
# i n c l u d e   &lt; i o s t r e a m &gt; \#include\ &lt;iostream&gt; #include <iostream>
# i n c l u d e   &lt; a l g o r i t h m &gt; \#include\ &lt;algorithm&gt; #include <algorithm>
# i n c l u d e   &lt; c s t r i n g &gt; \#include\ &lt;cstring&gt; #include <cstring>
# i n c l u d e   &lt; c s t r i n g &gt; \#include\ &lt;cstring&gt; #include <cstring>
# i n c l u d e   &lt; c m a t h &gt; \#include\ &lt;cmath&gt; #include <cmath>

t y p e d e f   l o n g   l o n g   l l ; typedef\ long\ long\ ll; typedef long long ll;

i n t   p o w e r m o d ( i n t   a ,   i n t   e x p ,   i n t   m o d e r ) int\ powermod(int\ a,\ int\ exp,\ int\ moder) int powermod(int a, int exp, int moder)
{ \{ {
     i n t   r e t   =   1 ; \ \ \ \ int\ ret\ =\ 1;     int ret = 1;
     f o r   ( ;   e x p ;   e x p   &gt; &gt; =   1 ) \ \ \ \ for\ (;\ exp;\ exp\ &gt;&gt;=\ 1)     for (; exp; exp >>= 1)
     { \ \ \ \ \{     {
         i f   ( e x p   &amp;   1 ) \ \ \ \ \ \ \ \ if\ (exp\ \&amp;\ 1)         if (exp & 1)
         { \ \ \ \ \ \ \ \ \{         {
             r e t   =   1 l l   ∗   r e t   ∗   a   %   m o d e r ; \ \ \ \ \ \ \ \ \ \ \ \ ret\ =\ 1ll\ *\ ret\ *\ a\ \%\ moder;             ret = 1ll  ret  a % moder;
         } \ \ \ \ \ \ \ \ \}         }
         a   =   1 l l   ∗   a   ∗   a   %   m o d e r ; \ \ \ \ \ \ \ \ a\ =\ 1ll\ *\ a\ *\ a\ \%\ moder;         a = 1ll  a  a % moder;
     } \ \ \ \ \}     }
     r e t u r n   r e t ; \ \ \ \ return\ ret;     return ret;
} \} }

v o i d   a d d m i n u s ( i n t   ∗ a ,   i n t   ∗ b ,   i n t   &amp; l e n g t h a ,   i n t   &amp; l e n g t h b ,   i n t   t y p e ) void\ addminus(int\ *a,\ int\ *b,\ int\ \&amp;lengtha,\ int\ \&amp;lengthb,\ int\ type) void addminus(int a, int b, int &lengtha, int &lengthb, int type)
{ \{ {
     i n t   l e n g t h   =   s t d : : m a x ( l e n g t h a ,   l e n g t h b ) ; \ \ \ \ int\ length\ =\ std::max(lengtha,\ lengthb);     int length = std::max(lengtha, lengthb);
     f o r   ( i n t   i   =   0 ;   i   &lt;   l e n g t h ;   + + i ) \ \ \ \ for\ (int\ i\ =\ 0;\ i\ &lt;\ length;\ ++i)     for (int i = 0; i < length; ++i)
     { \ \ \ \ \{     {
         a [ i ]   + =   t y p e   = =   1   ?   b [ i ]   :   − b [ i ] ; \ \ \ \ \ \ \ \ a[i]\ +=\ type\ ==\ 1\ ?\ b[i]\ :\ -b[i];         a[i] += type == 1 ? b[i] : b[i];
         a [ i ]   &gt; =   10   ?   ( a [ i ]   − =   10 ,   + + a [ i   +   1 ] )   :   a [ i ]   &lt;   0   ?   ( a [ i ]   + =   10 ,   − − a [ i   +   1 ] )   :   0 ; \ \ \ \ \ \ \ \ a[i]\ &gt;=\ 10\ ?\ (a[i]\ -=\ 10,\ ++a[i\ +\ 1])\ :\ a[i]\ &lt;\ 0\ ?\ (a[i]\ +=\ 10,\ --a[i\ +\ 1])\ :\ 0;         a[i] >= 10 ? (a[i] = 10, ++a[i + 1]) : a[i] < 0 ? (a[i] += 10, a[i + 1]) : 0;
     } \ \ \ \ \}     }
     f o r   ( l e n g t h a   =   l e n g t h   +   1 ;   l e n g t h a   &amp; &amp;   ! a [ l e n g t h a   −   1 ] ;   − − l e n g t h a )   ; \ \ \ \ for\ (lengtha\ =\ length\ +\ 1;\ lengtha\ \&amp;\&amp;\ !a[lengtha\ -\ 1];\ --lengtha)\ ;     for (lengtha = length + 1; lengtha && !a[lengtha  1]; lengtha) ;
} \} }

s t r u c t   B i g I n t e g e r struct\ BigInteger struct BigInteger
{ \{ {
     c o n s t   s t a t i c   i n t   M A X N   =   19 ; \ \ \ \ const\ static\ int\ MAXN\ =\ 19;     const static int MAXN = 19;
     c o n s t   s t a t i c   i n t   M O D   =   ( 119   &lt; &lt;   23 )   +   1 ;     / /    998244353 \ \ \ \ const\ static\ int\ MOD\ =\ (119\ &lt;&lt;\ 23)\ +\ 1;\ \ \ //\ \ 998244353     const static int MOD = (119 << 23) + 1;   //  998244353
     c o n s t   s t a t i c   i n t   r o o t   =   3 ; \ \ \ \ const\ static\ int\ root\ =\ 3;     const static int root = 3;
     c o n s t   s t a t i c   i n t   i n v r o o t   =   332748118 ; \ \ \ \ const\ static\ int\ invroot\ =\ 332748118;     const static int invroot = 332748118;

     i n t   a [ 1   &lt; &lt;   M A X N ] ; \ \ \ \ int\ a[1\ &lt;&lt;\ MAXN];     int a[1 << MAXN];
     i n t   l e n g t h ,   s i g ; \ \ \ \ int\ length,\ sig;     int length, sig;

     B i g I n t e g e r ( ) \ \ \ \ BigInteger()     BigInteger()
     { \ \ \ \ \{     {
         m e m s e t ( a ,   0 ,   s i z e o f ( a ) ) ; \ \ \ \ \ \ \ \ memset(a,\ 0,\ sizeof(a));         memset(a, 0, sizeof(a));
         l e n g t h   =   s i g   =   0 ; \ \ \ \ \ \ \ \ length\ =\ sig\ =\ 0;         length = sig = 0;
     } \ \ \ \ \}     }

     v o i d   c l e a r ( ) \ \ \ \ void\ clear()     void clear()
     { \ \ \ \ \{     {
         m e m s e t ( a ,   0 ,   s i z e o f ( i n t )   ∗   l e n g t h ) ; \ \ \ \ \ \ \ \ memset(a,\ 0,\ sizeof(int)\ *\ length);         memset(a, 0, sizeof(int)  length);
         l e n g t h   =   s i g   =   0 ; \ \ \ \ \ \ \ \ length\ =\ sig\ =\ 0;         length = sig = 0;
     } \ \ \ \ \}     }

     v o i d   r e a d ( ) \ \ \ \ void\ read()     void read()
     { \ \ \ \ \{     {
         c l e a r ( ) ; \ \ \ \ \ \ \ \ clear();         clear();
         c h a r   c h   =   g e t c h a r ( ) ; \ \ \ \ \ \ \ \ char\ ch\ =\ getchar();         char ch = getchar();
         f o r   ( ;   ( c h   &lt;   ′ 0 ′   ∣ ∣   c h   &gt;   ′ 9 ′ )   &amp; &amp;   c h   ! =   ′ − ′ ;   c h   =   g e t c h a r ( ) )   ; \ \ \ \ \ \ \ \ for\ (;\ (ch\ &lt;\ &#x27;0&#x27;\ ||\ ch\ &gt;\ &#x27;9&#x27;)\ \&amp;\&amp;\ ch\ !=\ &#x27;-&#x27;;\ ch\ =\ getchar())\ ;         for (; (ch < 0  ch > 9) && ch != ; ch = getchar()) ;
         c h   = =   ′ − ′   ?   ( s i g   =   − 1 ,   c h   =   g e t c h a r ( ) )   :   s i g   =   1 ; \ \ \ \ \ \ \ \ ch\ ==\ &#x27;-&#x27;\ ?\ (sig\ =\ -1,\ ch\ =\ getchar())\ :\ sig\ =\ 1;         ch ==  ? (sig = 1, ch = getchar()) : sig = 1;
         f o r   ( ;   c h   &gt; =   ′ 0 ′   &amp; &amp;   c h   &lt; =   ′ 9 ′ ;   c h   =   g e t c h a r ( ) ) \ \ \ \ \ \ \ \ for\ (;\ ch\ &gt;=\ &#x27;0&#x27;\ \&amp;\&amp;\ ch\ &lt;=\ &#x27;9&#x27;;\ ch\ =\ getchar())         for (; ch >= 0 && ch <= 9; ch = getchar())
         { \ \ \ \ \ \ \ \ \{         {
             a [ l e n g t h   + + ]   =   c h   −   ′ 0 ′ ; \ \ \ \ \ \ \ \ \ \ \ \ a[length\ ++]\ =\ ch\ -\ &#x27;0&#x27;;             a[length ++] = ch  0;
         } \ \ \ \ \ \ \ \ \}         }
         s t d : : r e v e r s e ( a ,   a   +   l e n g t h ) ; \ \ \ \ \ \ \ \ std::reverse(a,\ a\ +\ length);         std::reverse(a, a + length);
         f o r   ( ;   l e n g t h   &amp; &amp;   ! a [ l e n g t h   −   1 ] ;   − − l e n g t h )   ; \ \ \ \ \ \ \ \ for\ (;\ length\ \&amp;\&amp;\ !a[length\ -\ 1];\ --length)\ ;         for (; length && !a[length  1]; length) ;
         s i g   =   l e n g t h   ?   s i g   :   0 ; \ \ \ \ \ \ \ \ sig\ =\ length\ ?\ sig\ :\ 0;         sig = length ? sig : 0;
     } \ \ \ \ \}     }

     v o i d   w r i t e ( ) \ \ \ \ void\ write()     void write()
     { \ \ \ \ \{     {
         i f   ( ! s i g ) \ \ \ \ \ \ \ \ if\ (!sig)         if (!sig)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   ( v o i d ) p u t c h a r ( ′ 0 ′ ) ; \ \ \ \ \ \ \ \ \ \ \ \ return\ (void)putchar(&#x27;0&#x27;);             return (void)putchar(0);
         } \ \ \ \ \ \ \ \ \}         }
         i f   ( s i g   &lt;   0 ) \ \ \ \ \ \ \ \ if\ (sig\ &lt;\ 0)         if (sig < 0)
         { \ \ \ \ \ \ \ \ \{         {
             p u t c h a r ( ′ − ′ ) ; \ \ \ \ \ \ \ \ \ \ \ \ putchar(&#x27;-&#x27;);             putchar();
         } \ \ \ \ \ \ \ \ \}         }
         f o r   ( i n t   i   =   l e n g t h   −   1 ;   i   &gt; =   0 ;   i − − ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ length\ -\ 1;\ i\ &gt;=\ 0;\ i--)         for (int i = length  1; i >= 0; i)
         { \ \ \ \ \ \ \ \ \{         {
             p u t c h a r ( a [ i ]   +   ′ 0 ′ ) ; \ \ \ \ \ \ \ \ \ \ \ \ putchar(a[i]\ +\ &#x27;0&#x27;);             putchar(a[i] + 0);
         } \ \ \ \ \ \ \ \ \}         }
     } \ \ \ \ \}     }

     t e m p l a t e   &lt; t y p e n a m e   T &gt; \ \ \ \ template\ &lt;typename\ T&gt;     template <typename T>
     T   t o i n t e g e r ( ) \ \ \ \ T\ tointeger()     T tointeger()
     { \ \ \ \ \{     {
         T   r e t   =   0 ; \ \ \ \ \ \ \ \ T\ ret\ =\ 0;         T ret = 0;
         f o r   ( i n t   i   =   l e n g t h   −   1 ;   i   &gt; =   0 ;   + + i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ length\ -\ 1;\ i\ &gt;=\ 0;\ ++i)         for (int i = length  1; i >= 0; ++i)
         { \ \ \ \ \ \ \ \ \{         {
             r e t   =   r e t   ∗   10   +   a [ i ] ; \ \ \ \ \ \ \ \ \ \ \ \ ret\ =\ ret\ *\ 10\ +\ a[i];             ret = ret  10 + a[i];
         } \ \ \ \ \ \ \ \ \}         }
         r e t u r n   r e t   ∗   s i g ; \ \ \ \ \ \ \ \ return\ ret\ *\ sig;         return ret  sig;
     } \ \ \ \ \}     }

     b o o l   e q u a l ( c o n s t   B i g I n t e g e r   &amp; p ) \ \ \ \ bool\ equal(const\ BigInteger\ \&amp;p)     bool equal(const BigInteger &p)
     { \ \ \ \ \{     {
         i f   ( s i g   ! =   p . s i g   ∣ ∣   l e n g t h   ! =   p . l e n g t h ) \ \ \ \ \ \ \ \ if\ (sig\ !=\ p.sig\ ||\ length\ !=\ p.length)         if (sig != p.sig  length != p.length)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   f a l s e ; \ \ \ \ \ \ \ \ \ \ \ \ return\ false;             return false;
         } \ \ \ \ \ \ \ \ \}         }
         f o r   ( i n t   i   =   0 ;   i   &lt;   l e n g t h ;   + + i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ 0;\ i\ &lt;\ length;\ ++i)         for (int i = 0; i < length; ++i)
         { \ \ \ \ \ \ \ \ \{         {
             i f   ( a [ i ]   ! =   p . a [ i ] ) \ \ \ \ \ \ \ \ \ \ \ \ if\ (a[i]\ !=\ p.a[i])             if (a[i] != p.a[i])
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 r e t u r n   f a l s e ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ false;                 return false;
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
         } \ \ \ \ \ \ \ \ \}         }
         r e t u r n   t r u e ; \ \ \ \ \ \ \ \ return\ true;         return true;
     } \ \ \ \ \}     }

     b o o l   g r e a t e r ( c o n s t   B i g I n t e g e r   &amp; p ) \ \ \ \ bool\ greater(const\ BigInteger\ \&amp;p)     bool greater(const BigInteger &p)
     { \ \ \ \ \{     {
         i f   ( s i g   ! =   p . s i g ) \ \ \ \ \ \ \ \ if\ (sig\ !=\ p.sig)         if (sig != p.sig)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   s i g   &gt;   p . s i g ; \ \ \ \ \ \ \ \ \ \ \ \ return\ sig\ &gt;\ p.sig;             return sig > p.sig;
         } \ \ \ \ \ \ \ \ \}         }
         i f   ( l e n g t h   ! =   p . l e n g t h ) \ \ \ \ \ \ \ \ if\ (length\ !=\ p.length)         if (length != p.length)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   l e n g t h   &gt;   p . l e n g t h   ∧   s i g   = =   − 1 ; \ \ \ \ \ \ \ \ \ \ \ \ return\ length\ &gt;\ p.length\ \wedge \ sig\ ==\ -1;             return length > p.length  sig == 1;
         } \ \ \ \ \ \ \ \ \}         }
         f o r   ( i n t   i   =   l e n g t h   −   1 ;   i   &gt; =   0 ;   − − i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ length\ -\ 1;\ i\ &gt;=\ 0;\ --i)         for (int i = length  1; i >= 0; i)
         { \ \ \ \ \ \ \ \ \{         {
             i f   ( a [ i ]   &gt;   p . a [ i ] ) \ \ \ \ \ \ \ \ \ \ \ \ if\ (a[i]\ &gt;\ p.a[i])             if (a[i] > p.a[i])
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 r e t u r n   s i g   &gt;   0 ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ sig\ &gt;\ 0;                 return sig > 0;
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
             e l s e   i f   ( a [ i ]   &lt;   p . a [ i ] ) \ \ \ \ \ \ \ \ \ \ \ \ else\ if\ (a[i]\ &lt;\ p.a[i])             else if (a[i] < p.a[i])
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 r e t u r n   s i g   &lt;   0 ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ sig\ &lt;\ 0;                 return sig < 0;
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
         } \ \ \ \ \ \ \ \ \}         }
         r e t u r n   f a l s e ; \ \ \ \ \ \ \ \ return\ false;         return false;
     } \ \ \ \ \}     }

     v o i d   l e f t s h i f t ( i n t   d i s ) \ \ \ \ void\ leftshift(int\ dis)     void leftshift(int dis)
     { \ \ \ \ \{     {
         f o r   ( i n t   i   =   l e n g t h   +   d i s   −   1 ;   i   &gt; =   d i s ;   − − i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ length\ +\ dis\ -\ 1;\ i\ &gt;=\ dis;\ --i)         for (int i = length + dis  1; i >= dis; i)
         { \ \ \ \ \ \ \ \ \{         {
             a [ i ]   =   a [ i   −   d i s ] ; \ \ \ \ \ \ \ \ \ \ \ \ a[i]\ =\ a[i\ -\ dis];             a[i] = a[i  dis];
         } \ \ \ \ \ \ \ \ \}         }
         m e m s e t ( a ,   0 ,   s i z e o f ( i n t )   ∗   d i s ) ; \ \ \ \ \ \ \ \ memset(a,\ 0,\ sizeof(int)\ *\ dis);         memset(a, 0, sizeof(int)  dis);
         l e n g t h   + =   d i s ; \ \ \ \ \ \ \ \ length\ +=\ dis;         length += dis;
     } \ \ \ \ \}     }

     v o i d   r i g h t s h i f t ( i n t   d i s ) \ \ \ \ void\ rightshift(int\ dis)     void rightshift(int dis)
     { \ \ \ \ \{     {
         i f   ( d i s   &gt; =   l e n g t h ) \ \ \ \ \ \ \ \ if\ (dis\ &gt;=\ length)         if (dis >= length)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   c l e a r ( ) ; \ \ \ \ \ \ \ \ \ \ \ \ return\ clear();             return clear();
         } \ \ \ \ \ \ \ \ \}         }
         f o r   ( i n t   i   =   0 ;   i   &lt;   l e n g t h   −   d i s ;   + + i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ 0;\ i\ &lt;\ length\ -\ dis;\ ++i)         for (int i = 0; i < length  dis; ++i)
         { \ \ \ \ \ \ \ \ \{         {
             a [ i ]   =   a [ i   +   d i s ] ; \ \ \ \ \ \ \ \ \ \ \ \ a[i]\ =\ a[i\ +\ dis];             a[i] = a[i + dis];
         } \ \ \ \ \ \ \ \ \}         }
         m e m s e t ( a   +   l e n g t h   −   d i s ,   0 ,   s i z e o f ( i n t )   ∗   d i s ) ; \ \ \ \ \ \ \ \ memset(a\ +\ length\ -\ dis,\ 0,\ sizeof(int)\ *\ dis);         memset(a + length  dis, 0, sizeof(int)  dis);
         l e n g t h   =   l e n g t h   −   d i s   &gt;   0   ?   l e n g t h   −   d i s   :   0 ; \ \ \ \ \ \ \ \ length\ =\ length\ -\ dis\ &gt;\ 0\ ?\ length\ -\ dis\ :\ 0;         length = length  dis > 0 ? length  dis : 0;
     } \ \ \ \ \}     }

     v o i d   a d d o n e ( ) \ \ \ \ void\ addone()     void addone()
     { \ \ \ \ \{     {
         s i g   &gt; =   0   ?   + +   a [ 0 ]   :   − − a [ 0 ] ; \ \ \ \ \ \ \ \ sig\ &gt;=\ 0\ ?\ ++\ a[0]\ :\ --a[0];         sig >= 0 ? ++ a[0] : a[0];
         f o r   ( i n t   i   =   0 ;   i   &lt;   l e n g t h ;   + + i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ 0;\ i\ &lt;\ length;\ ++i)         for (int i = 0; i < length; ++i)
         { \ \ \ \ \ \ \ \ \{         {
             i f   ( a [ i ]   &lt;   10   &amp; &amp;   a [ i ]   &gt; =   0 ) \ \ \ \ \ \ \ \ \ \ \ \ if\ (a[i]\ &lt;\ 10\ \&amp;\&amp;\ a[i]\ &gt;=\ 0)             if (a[i] < 10 && a[i] >= 0)
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 b r e a k ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ break;                 break;
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
             a [ i ]   &gt; =   10   ?   ( a [ i ]   − =   10 ,   + + a [ i   +   1 ] )   :   ( a [ i ]   + =   10 ,   − − a [ i   +   1 ] ) ; \ \ \ \ \ \ \ \ \ \ \ \ a[i]\ &gt;=\ 10\ ?\ (a[i]\ -=\ 10,\ ++a[i\ +\ 1])\ :\ (a[i]\ +=\ 10,\ --a[i\ +\ 1]);             a[i] >= 10 ? (a[i] = 10, ++a[i + 1]) : (a[i] += 10, a[i + 1]);
         } \ \ \ \ \ \ \ \ \}         }
         i f   ( a [ l e n g t h ] ) \ \ \ \ \ \ \ \ if\ (a[length])         if (a[length])
         { \ \ \ \ \ \ \ \ \{         {
             + + l e n g t h ; \ \ \ \ \ \ \ \ \ \ \ \ ++length;             ++length;
         } \ \ \ \ \ \ \ \ \}         }
         i f   ( ! a [ l e n g t h   −   1 ] ) \ \ \ \ \ \ \ \ if\ (!a[length\ -\ 1])         if (!a[length  1])
         { \ \ \ \ \ \ \ \ \{         {
             − − l e n g t h ; \ \ \ \ \ \ \ \ \ \ \ \ --length;             length;
         } \ \ \ \ \ \ \ \ \}         }
         s i g   =   l e n g t h   ?   ( s i g   &gt; =   0   ?   1   :   − 1 )   :   0 ; \ \ \ \ \ \ \ \ sig\ =\ length\ ?\ (sig\ &gt;=\ 0\ ?\ 1\ :\ -1)\ :\ 0;         sig = length ? (sig >= 0 ? 1 : 1) : 0;
     } \ \ \ \ \}     }

     v o i d   m i n u s o n e ( ) \ \ \ \ void\ minusone()     void minusone()
     { \ \ \ \ \{     {
         s i g   =   − s i g ; \ \ \ \ \ \ \ \ sig\ =\ -sig;         sig = sig;
         a d d o n e ( ) ; \ \ \ \ \ \ \ \ addone();         addone();
         s i g   =   − s i g ; \ \ \ \ \ \ \ \ sig\ =\ -sig;         sig = sig;
     } \ \ \ \ \}     }

     b o o l   a b s g r e a t e r e q u a l ( B i g I n t e g e r   &amp; q ) \ \ \ \ bool\ absgreaterequal(BigInteger\ \&amp;q)     bool absgreaterequal(BigInteger &q)
     { \ \ \ \ \{     {
         i f   ( l e n g t h   ! =   q . l e n g t h ) \ \ \ \ \ \ \ \ if\ (length\ !=\ q.length)         if (length != q.length)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   l e n g t h   &gt;   q . l e n g t h ; \ \ \ \ \ \ \ \ \ \ \ \ return\ length\ &gt;\ q.length;             return length > q.length;
         } \ \ \ \ \ \ \ \ \}         }
         f o r   ( i n t   i   =   l e n g t h   −   1 ;   i   &gt; =   0 ;   − −   i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ length\ -\ 1;\ i\ &gt;=\ 0;\ --\ i)         for (int i = length  1; i >= 0;  i)
         { \ \ \ \ \ \ \ \ \{         {
             i f   ( a [ i ]   &gt;   q . a [ i ] ) \ \ \ \ \ \ \ \ \ \ \ \ if\ (a[i]\ &gt;\ q.a[i])             if (a[i] > q.a[i])
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 r e t u r n   t r u e ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ true;                 return true;
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
             i f   ( a [ i ]   &lt;   q . a [ i ] ) \ \ \ \ \ \ \ \ \ \ \ \ if\ (a[i]\ &lt;\ q.a[i])             if (a[i] < q.a[i])
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 r e t u r n   f a l s e ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ false;                 return false;
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
         } \ \ \ \ \ \ \ \ \}         }
         r e t u r n   t r u e ; \ \ \ \ \ \ \ \ return\ true;         return true;
     } \ \ \ \ \}     }

     v o i d   a b s ( ) \ \ \ \ void\ abs()     void abs()
     { \ \ \ \ \{     {
         s i g   =   s t d : : a b s ( s i g ) ; \ \ \ \ \ \ \ \ sig\ =\ std::abs(sig);         sig = std::abs(sig);
     } \ \ \ \ \}     }

     v o i d   n e g ( ) \ \ \ \ void\ neg()     void neg()
     { \ \ \ \ \{     {
         s i g   =   − s i g ; \ \ \ \ \ \ \ \ sig\ =\ -sig;         sig = sig;
     } \ \ \ \ \}     }

     v o i d   a s s i g n ( B i g I n t e g e r   &amp; q ) \ \ \ \ void\ assign(BigInteger\ \&amp;q)     void assign(BigInteger &q)
     { \ \ \ \ \{     {
         m e m s e t ( a ,   0 ,   s i z e o f ( i n t )   ∗   l e n g t h ) ; \ \ \ \ \ \ \ \ memset(a,\ 0,\ sizeof(int)\ *\ length);         memset(a, 0, sizeof(int)  length);
         m e m c p y ( a ,   q . a ,   s i z e o f ( i n t )   ∗   q . l e n g t h ) ; \ \ \ \ \ \ \ \ memcpy(a,\ q.a,\ sizeof(int)\ *\ q.length);         memcpy(a, q.a, sizeof(int)  q.length);
         l e n g t h   =   q . l e n g t h ; \ \ \ \ \ \ \ \ length\ =\ q.length;         length = q.length;
         s i g   =   q . s i g ; \ \ \ \ \ \ \ \ sig\ =\ q.sig;         sig = q.sig;
     } \ \ \ \ \}     }

     t e m p l a t e   &lt; t y p e n a m e   T &gt; \ \ \ \ template\ &lt;typename\ T&gt;     template <typename T>
     v o i d   a s s i g n ( T   q ) \ \ \ \ void\ assign(T\ q)     void assign(T q)
     { \ \ \ \ \{     {
         m e m s e t ( a ,   0 ,   s i z e o f ( i n t )   ∗   l e n g t h ) ; \ \ \ \ \ \ \ \ memset(a,\ 0,\ sizeof(int)\ *\ length);         memset(a, 0, sizeof(int)  length);
         i f   ( ! q ) \ \ \ \ \ \ \ \ if\ (!q)         if (!q)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   ( v o i d ) ( s i g   =   l e n g t h   =   0 ) ; \ \ \ \ \ \ \ \ \ \ \ \ return\ (void)(sig\ =\ length\ =\ 0);             return (void)(sig = length = 0);
         } \ \ \ \ \ \ \ \ \}         }
         q   &lt;   0   ?   s i g   =   − 1 ,   q   =   − q   :   s i g   =   1 ; \ \ \ \ \ \ \ \ q\ &lt;\ 0\ ?\ sig\ =\ -1,\ q\ =\ -q\ :\ sig\ =\ 1;         q < 0 ? sig = 1, q = q : sig = 1;
         l e n g t h   =   0 ; \ \ \ \ \ \ \ \ length\ =\ 0;         length = 0;
         f o r   ( ;   q ;   q   / =   10 ) \ \ \ \ \ \ \ \ for\ (;\ q;\ q\ /=\ 10)         for (; q; q /= 10)
         { \ \ \ \ \ \ \ \ \{         {
             a [ l e n g t h + + ]   =   q   %   10 ; \ \ \ \ \ \ \ \ \ \ \ \ a[length++]\ =\ q\ \%\ 10;             a[length++] = q % 10;
         } \ \ \ \ \ \ \ \ \}         }
     } \ \ \ \ \}     }

     v o i d   a d d ( B i g I n t e g e r   &amp; q ) \ \ \ \ void\ add(BigInteger\ \&amp;q)     void add(BigInteger &q)
     { \ \ \ \ \{     {
         s t a t i c   B i g I n t e g e r   a u x ; \ \ \ \ \ \ \ \ static\ BigInteger\ aux;         static BigInteger aux;
         i f   ( ! q . s i g ) \ \ \ \ \ \ \ \ if\ (!q.sig)         if (!q.sig)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   ; \ \ \ \ \ \ \ \ \ \ \ \ return\ ;             return ;
         } \ \ \ \ \ \ \ \ \}         }
         i f   ( ! s i g ) \ \ \ \ \ \ \ \ if\ (!sig)         if (!sig)
         { \ \ \ \ \ \ \ \ \{         {
             a s s i g n ( q ) ; \ \ \ \ \ \ \ \ \ \ \ \ assign(q);             assign(q);
             r e t u r n   ; \ \ \ \ \ \ \ \ \ \ \ \ return\ ;             return ;
         } \ \ \ \ \ \ \ \ \}         }
         i f   ( s i g   = =   q . s i g ) \ \ \ \ \ \ \ \ if\ (sig\ ==\ q.sig)         if (sig == q.sig)
         { \ \ \ \ \ \ \ \ \{         {
             a d d m i n u s ( a ,   q . a ,   l e n g t h ,   q . l e n g t h ,   1 ) ; \ \ \ \ \ \ \ \ \ \ \ \ addminus(a,\ q.a,\ length,\ q.length,\ 1);             addminus(a, q.a, length, q.length, 1);
             r e t u r n   ; \ \ \ \ \ \ \ \ \ \ \ \ return\ ;             return ;
         } \ \ \ \ \ \ \ \ \}         }
         i f   ( a b s g r e a t e r e q u a l ( q ) ) \ \ \ \ \ \ \ \ if\ (absgreaterequal(q))         if (absgreaterequal(q))
         { \ \ \ \ \ \ \ \ \{         {
             a d d m i n u s ( a ,   q . a ,   l e n g t h ,   q . l e n g t h ,   − 1 ) ; \ \ \ \ \ \ \ \ \ \ \ \ addminus(a,\ q.a,\ length,\ q.length,\ -1);             addminus(a, q.a, length, q.length, 1);
             s i g   =   l e n g t h   ?   s i g   :   0 ; \ \ \ \ \ \ \ \ \ \ \ \ sig\ =\ length\ ?\ sig\ :\ 0;             sig = length ? sig : 0;
             r e t u r n   ; \ \ \ \ \ \ \ \ \ \ \ \ return\ ;             return ;
         } \ \ \ \ \ \ \ \ \}         }
         a u x . a s s i g n ( q ) ; \ \ \ \ \ \ \ \ aux.assign(q);         aux.assign(q);
         a d d m i n u s ( q . a ,   a ,   q . l e n g t h ,   l e n g t h ,   − 1 ) ; \ \ \ \ \ \ \ \ addminus(q.a,\ a,\ q.length,\ length,\ -1);         addminus(q.a, a, q.length, length, 1);
         a s s i g n ( q ) ; \ \ \ \ \ \ \ \ assign(q);         assign(q);
         q . a s s i g n ( a u x ) ; \ \ \ \ \ \ \ \ q.assign(aux);         q.assign(aux);
     } \ \ \ \ \}     }

     v o i d   m i n u s ( B i g I n t e g e r   &amp; q ) \ \ \ \ void\ minus(BigInteger\ \&amp;q)     void minus(BigInteger &q)
     { \ \ \ \ \{     {
         q . n e g ( ) ; \ \ \ \ \ \ \ \ q.neg();         q.neg();
         a d d ( q ) ; \ \ \ \ \ \ \ \ add(q);         add(q);
         q . n e g ( ) ; \ \ \ \ \ \ \ \ q.neg();         q.neg();
     } \ \ \ \ \}     }

     v o i d   N T T ( i n t   ∗ a ,   i n t   l e n g t h ,   i n t   t y p e ) \ \ \ \ void\ NTT(int\ *a,\ int\ length,\ int\ type)     void NTT(int a, int length, int type)
     { \ \ \ \ \{     {
         i n t   l e n   =   − 1 ; \ \ \ \ \ \ \ \ int\ len\ =\ -1;         int len = 1;
         f o r   ( i n t   x   =   l e n g t h ;   x ;   + + l e n ,   x   &gt; &gt; =   1 )   ; \ \ \ \ \ \ \ \ for\ (int\ x\ =\ length;\ x;\ ++len,\ x\ &gt;&gt;=\ 1)\ ;         for (int x = length; x; ++len, x >>= 1) ;
         f o r   ( i n t   i   =   1 ,   j   =   0 ;   i   &lt;   l e n g t h   −   1 ;   + + i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ 1,\ j\ =\ 0;\ i\ &lt;\ length\ -\ 1;\ ++i)         for (int i = 1, j = 0; i < length  1; ++i)
         { \ \ \ \ \ \ \ \ \{         {
             f o r   ( i n t   s   =   l e n g t h ;   j   ∧ =   s   &gt; &gt; =   1 ,    j   &amp;   s ;   )   ; \ \ \ \ \ \ \ \ \ \ \ \ for\ (int\ s\ =\ length;\ j\ \wedge =\ s\ &gt;&gt;=\ 1,\ ~j\ \&amp;\ s;\ )\ ;             for (int s = length; j = s >>= 1,  j & s; ) ;
             i f   ( i   &lt;   j ) \ \ \ \ \ \ \ \ \ \ \ \ if\ (i\ &lt;\ j)             if (i < j)
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 s t d : : s w a p ( a [ i ] ,   a [ j ] ) ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::swap(a[i],\ a[j]);                 std::swap(a[i], a[j]);
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
         } \ \ \ \ \ \ \ \ \}         }

         f o r   ( i n t   i   =   1 ;   i   &lt; =   l e n ;   + +   i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ 1;\ i\ &lt;=\ len;\ ++\ i)         for (int i = 1; i <= len; ++ i)
         { \ \ \ \ \ \ \ \ \{         {
             i n t   u n i t   =   p o w e r m o d ( t y p e   = =   1   ?   r o o t   :   i n v r o o t ,   ( M O D   −   1 )   &gt; &gt;   i ,   M O D ) ,   s z k   =   1   &lt; &lt;   ( i   −   1 ) ; \ \ \ \ \ \ \ \ \ \ \ \ int\ unit\ =\ powermod(type\ ==\ 1\ ?\ root\ :\ invroot,\ (MOD\ -\ 1)\ &gt;&gt;\ i,\ MOD),\ szk\ =\ 1\ &lt;&lt;\ (i\ -\ 1);             int unit = powermod(type == 1 ? root : invroot, (MOD  1) >> i, MOD), szk = 1 << (i  1);
             f o r   ( i n t   j   =   0 ;   j   &lt;   l e n g t h ;   j   + =   1   &lt; &lt;   i ) \ \ \ \ \ \ \ \ \ \ \ \ for\ (int\ j\ =\ 0;\ j\ &lt;\ length;\ j\ +=\ 1\ &lt;&lt;\ i)             for (int j = 0; j < length; j += 1 << i)
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 f o r   ( i n t   k   =   j ,   w   =   1 ;   k   &lt;   j   +   s z k ;   + + k ) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ (int\ k\ =\ j,\ w\ =\ 1;\ k\ &lt;\ j\ +\ szk;\ ++k)                 for (int k = j, w = 1; k < j + szk; ++k)
                 { \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{                 {
                     i n t   s   =   a [ k ] ,   t   =   1 l l   ∗   w   ∗   a [ k   +   s z k ]   %   M O D ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ int\ s\ =\ a[k],\ t\ =\ 1ll\ *\ w\ *\ a[k\ +\ szk]\ \%\ MOD;                     int s = a[k], t = 1ll  w  a[k + szk] % MOD;
                     a [ k ]   =   s   +   t   &gt; =   M O D   ?   s   +   t   −   M O D   :   s   +   t ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ a[k]\ =\ s\ +\ t\ &gt;=\ MOD\ ?\ s\ +\ t\ -\ MOD\ :\ s\ +\ t;                     a[k] = s + t >= MOD ? s + t  MOD : s + t;
                     a [ k   +   s z k ]   =   s   −   t   &lt;   0   ?   s   −   t   +   M O D   :   s   −   t ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ a[k\ +\ szk]\ =\ s\ -\ t\ &lt;\ 0\ ?\ s\ -\ t\ +\ MOD\ :\ s\ -\ t;                     a[k + szk] = s  t < 0 ? s  t + MOD : s  t;
                     w   =   1 l l   ∗   w   ∗   u n i t   %   M O D ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ w\ =\ 1ll\ *\ w\ *\ unit\ \%\ MOD;                     w = 1ll  w  unit % MOD;
                 } \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}                 }
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
         } \ \ \ \ \ \ \ \ \}         }
         i f   ( t y p e   = =   1 ) \ \ \ \ \ \ \ \ if\ (type\ ==\ 1)         if (type == 1)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   ; \ \ \ \ \ \ \ \ \ \ \ \ return\ ;             return ;
         } \ \ \ \ \ \ \ \ \}         }
         i n t   i n v   =   p o w e r m o d ( l e n g t h ,   M O D   −   2 ,   M O D ) ; \ \ \ \ \ \ \ \ int\ inv\ =\ powermod(length,\ MOD\ -\ 2,\ MOD);         int inv = powermod(length, MOD  2, MOD);
         f o r   ( i n t   i   =   0 ;   i   &lt;   l e n g t h ;   + +   i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ 0;\ i\ &lt;\ length;\ ++\ i)         for (int i = 0; i < length; ++ i)
         { \ \ \ \ \ \ \ \ \{         {
             a [ i ]   =   1 l l   ∗   a [ i ]   ∗   i n v   %   M O D ; \ \ \ \ \ \ \ \ \ \ \ \ a[i]\ =\ 1ll\ *\ a[i]\ *\ inv\ \%\ MOD;             a[i] = 1ll  a[i]  inv % MOD;
         } \ \ \ \ \ \ \ \ \}         }
     } \ \ \ \ \}     }

     v o i d   m u l t ( B i g I n t e g e r   &amp; q ) \ \ \ \ void\ mult(BigInteger\ \&amp;q)     void mult(BigInteger &q)
     { \ \ \ \ \{     {
         s t a t i c   i n t   a u x [ 1   &lt; &lt;   M A X N ] ; \ \ \ \ \ \ \ \ static\ int\ aux[1\ &lt;&lt;\ MAXN];         static int aux[1 << MAXN];
         i f   ( ! s i g   ∣ ∣   ! q . s i g ) \ \ \ \ \ \ \ \ if\ (!sig\ ||\ !q.sig)         if (!sig  !q.sig)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   c l e a r ( ) ; \ \ \ \ \ \ \ \ \ \ \ \ return\ clear();             return clear();
         } \ \ \ \ \ \ \ \ \}         }
         i n t   n   =   l e n g t h   +   q . l e n g t h ; \ \ \ \ \ \ \ \ int\ n\ =\ length\ +\ q.length;         int n = length + q.length;
         i n t   l e n g t h a n s   =   1 ; \ \ \ \ \ \ \ \ int\ lengthans\ =\ 1;         int lengthans = 1;
         f o r   ( ;   l e n g t h a n s   &lt;   n ;   l e n g t h a n s   &lt; &lt; =   1 )   ; \ \ \ \ \ \ \ \ for\ (;\ lengthans\ &lt;\ n;\ lengthans\ &lt;&lt;=\ 1)\ ;         for (; lengthans < n; lengthans <<= 1) ;
         m e m c p y ( a u x ,   q . a ,   s i z e o f ( i n t )   ∗   l e n g t h a n s ) ; \ \ \ \ \ \ \ \ memcpy(aux,\ q.a,\ sizeof(int)\ *\ lengthans);         memcpy(aux, q.a, sizeof(int)  lengthans);
         N T T ( a ,   l e n g t h a n s ,   1 ) ; \ \ \ \ \ \ \ \ NTT(a,\ lengthans,\ 1);         NTT(a, lengthans, 1);
         N T T ( a u x ,   l e n g t h a n s ,   1 ) ; \ \ \ \ \ \ \ \ NTT(aux,\ lengthans,\ 1);         NTT(aux, lengthans, 1);
         f o r   ( i n t   i   =   0 ;   i   &lt;   l e n g t h a n s ;   i + + ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ 0;\ i\ &lt;\ lengthans;\ i++)         for (int i = 0; i < lengthans; i++)
         { \ \ \ \ \ \ \ \ \{         {
             a [ i ]   =   1 l l   ∗   a [ i ]   ∗   a u x [ i ]   %   M O D ; \ \ \ \ \ \ \ \ \ \ \ \ a[i]\ =\ 1ll\ *\ a[i]\ *\ aux[i]\ \%\ MOD;             a[i] = 1ll  a[i]  aux[i] % MOD;
         } \ \ \ \ \ \ \ \ \}         }
         N T T ( a ,   l e n g t h a n s ,   − 1 ) ; \ \ \ \ \ \ \ \ NTT(a,\ lengthans,\ -1);         NTT(a, lengthans, 1);
         f o r   ( i n t   i   =   0 ;   i   &lt;   n   −   1 ;   i + + ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ 0;\ i\ &lt;\ n\ -\ 1;\ i++)         for (int i = 0; i < n  1; i++)
         { \ \ \ \ \ \ \ \ \{         {
             a [ i   +   1 ]   + =   a [ i ]   /   10 ; \ \ \ \ \ \ \ \ \ \ \ \ a[i\ +\ 1]\ +=\ a[i]\ /\ 10;             a[i + 1] += a[i] / 10;
             a [ i ]   % =   10 ; \ \ \ \ \ \ \ \ \ \ \ \ a[i]\ \%=\ 10;             a[i] %= 10;
         } \ \ \ \ \ \ \ \ \}         }
         l e n g t h   =   n ; \ \ \ \ \ \ \ \ length\ =\ n;         length = n;
         f o r   ( ;   l e n g t h   &amp; &amp;   ! a [ l e n g t h   −   1 ] ;   − − l e n g t h )   ; \ \ \ \ \ \ \ \ for\ (;\ length\ \&amp;\&amp;\ !a[length\ -\ 1];\ --length)\ ;         for (; length && !a[length  1]; length) ;
         s i g   ∗ =   q . s i g ; \ \ \ \ \ \ \ \ sig\ *=\ q.sig;         sig = q.sig;
     } \ \ \ \ \}     }

     v o i d   m u l t ( i n t   q ) \ \ \ \ void\ mult(int\ q)     void mult(int q)
     { \ \ \ \ \{     {
         i f   ( ! q   ∣ ∣   ! s i g ) \ \ \ \ \ \ \ \ if\ (!q\ ||\ !sig)         if (!q  !sig)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   c l e a r ( ) ; \ \ \ \ \ \ \ \ \ \ \ \ return\ clear();             return clear();
         } \ \ \ \ \ \ \ \ \}         }
         l l   x   =   s t d : : a b s ( q ) ,   r e m a i n   =   0 ; \ \ \ \ \ \ \ \ ll\ x\ =\ std::abs(q),\ remain\ =\ 0;         ll x = std::abs(q), remain = 0;
         f o r   ( i n t   i   =   0 ;   i   &lt;   l e n g t h ;   + + i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ 0;\ i\ &lt;\ length;\ ++i)         for (int i = 0; i < length; ++i)
         { \ \ \ \ \ \ \ \ \{         {
             r e m a i n   + =   a [ i ]   ∗   x ; \ \ \ \ \ \ \ \ \ \ \ \ remain\ +=\ a[i]\ *\ x;             remain += a[i]  x;
             a [ i ]   =   r e m a i n   %   10 ; \ \ \ \ \ \ \ \ \ \ \ \ a[i]\ =\ remain\ \%\ 10;             a[i] = remain % 10;
             r e m a i n   / =   10 ; \ \ \ \ \ \ \ \ \ \ \ \ remain\ /=\ 10;             remain /= 10;
         } \ \ \ \ \ \ \ \ \}         }
         a [ l e n g t h ]   =   ( i n t ) r e m a i n ; \ \ \ \ \ \ \ \ a[length]\ =\ (int)remain;         a[length] = (int)remain;
         f o r   ( ;   a [ l e n g t h ] ;   + + l e n g t h ) \ \ \ \ \ \ \ \ for\ (;\ a[length];\ ++length)         for (; a[length]; ++length)
         { \ \ \ \ \ \ \ \ \{         {
             a [ l e n g t h   +   1 ]   =   a [ l e n g t h ]   /   10 ; \ \ \ \ \ \ \ \ \ \ \ \ a[length\ +\ 1]\ =\ a[length]\ /\ 10;             a[length + 1] = a[length] / 10;
             a [ l e n g t h ]   % =   10 ; \ \ \ \ \ \ \ \ \ \ \ \ a[length]\ \%=\ 10;             a[length] %= 10;
         } \ \ \ \ \ \ \ \ \}         }
         f o r   ( ;   l e n g t h   &amp; &amp;   ! a [ l e n g t h   −   1 ] ;   − − l e n g t h )   ; \ \ \ \ \ \ \ \ for\ (;\ length\ \&amp;\&amp;\ !a[length\ -\ 1];\ --length)\ ;         for (; length && !a[length  1]; length) ;
         s i g   ∗ =   q   &lt;   0   ?   − 1   :   1 ; \ \ \ \ \ \ \ \ sig\ *=\ q\ &lt;\ 0\ ?\ -1\ :\ 1;         sig = q < 0 ? 1 : 1;
     } \ \ \ \ \}     }

     v o i d   p o w e r ( i n t   e x p ) \ \ \ \ void\ power(int\ exp)     void power(int exp)
     { \ \ \ \ \{     {
         s t a t i c   B i g I n t e g e r   a u x ; \ \ \ \ \ \ \ \ static\ BigInteger\ aux;         static BigInteger aux;
         i f   ( ! s i g ) \ \ \ \ \ \ \ \ if\ (!sig)         if (!sig)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   ; \ \ \ \ \ \ \ \ \ \ \ \ return\ ;             return ;
         } \ \ \ \ \ \ \ \ \}         }
         a u x . a s s i g n &lt; i n t &gt;   ( 1 ) ; \ \ \ \ \ \ \ \ aux.assign&lt;int&gt;\ (1);         aux.assign<int> (1);
         f o r   ( ;   e x p ;   e x p   &gt; &gt; =   1 ) \ \ \ \ \ \ \ \ for\ (;\ exp;\ exp\ &gt;&gt;=\ 1)         for (; exp; exp >>= 1)
         { \ \ \ \ \ \ \ \ \{         {
             i f   ( e x p   &amp;   1 ) \ \ \ \ \ \ \ \ \ \ \ \ if\ (exp\ \&amp;\ 1)             if (exp & 1)
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 a u x . m u l t ( ∗ t h i s ) ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ aux.mult(*this);                 aux.mult(this);
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
             a u x . m u l t ( a u x ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux.mult(aux);             aux.mult(aux);
         } \ \ \ \ \ \ \ \ \}         }
         a s s i g n ( a u x ) ; \ \ \ \ \ \ \ \ assign(aux);         assign(aux);
     } \ \ \ \ \}     }

     v o i d   d i v i d e ( B i g I n t e g e r   &amp; q ) \ \ \ \ void\ divide(BigInteger\ \&amp;q)     void divide(BigInteger &q)
     { \ \ \ \ \{     {
         s t a t i c   B i g I n t e g e r   a u x ,   a u x 1 ; \ \ \ \ \ \ \ \ static\ BigInteger\ aux,\ aux1;         static BigInteger aux, aux1;
         i f   ( ! s i g   ∣ ∣   ! q . s i g ) \ \ \ \ \ \ \ \ if\ (!sig\ ||\ !q.sig)         if (!sig  !q.sig)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   ; \ \ \ \ \ \ \ \ \ \ \ \ return\ ;             return ;
         } \ \ \ \ \ \ \ \ \}         }
         i f   ( l e n g t h   &lt;   q . l e n g t h ) \ \ \ \ \ \ \ \ if\ (length\ &lt;\ q.length)         if (length < q.length)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   c l e a r ( ) ; \ \ \ \ \ \ \ \ \ \ \ \ return\ clear();             return clear();
         } \ \ \ \ \ \ \ \ \}         }
         b o o l   n e g 1   =   s i g   = =   1 ,   n e g 2   =   q . s i g   = =   1 ; \ \ \ \ \ \ \ \ bool\ neg1\ =\ sig\ ==\ 1,\ neg2\ =\ q.sig\ ==\ 1;         bool neg1 = sig == 1, neg2 = q.sig == 1;
         a b s ( ) ,   q . a b s ( ) ; \ \ \ \ \ \ \ \ abs(),\ q.abs();         abs(), q.abs();
         i n t   n u m   =   0 ; \ \ \ \ \ \ \ \ int\ num\ =\ 0;         int num = 0;
         f o r   ( i n t   i   =   q . l e n g t h   −   1 ;   i   &gt; =   q . l e n g t h   −   3 ;   − − i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ q.length\ -\ 1;\ i\ &gt;=\ q.length\ -\ 3;\ --i)         for (int i = q.length  1; i >= q.length  3; i)
         { \ \ \ \ \ \ \ \ \{         {
             ( n u m   ∗ =   10 )   + =   i   &gt; =   0   ?   q . a [ i ]   :   0 ; \ \ \ \ \ \ \ \ \ \ \ \ (num\ *=\ 10)\ +=\ i\ &gt;=\ 0\ ?\ q.a[i]\ :\ 0;             (num = 10) += i >= 0 ? q.a[i] : 0;
         } \ \ \ \ \ \ \ \ \}         }
         n u m   =   100000   /   n u m ; \ \ \ \ \ \ \ \ num\ =\ 100000\ /\ num;         num = 100000 / num;
         i n t   n o w p r e c i s i o n   =   1 ; \ \ \ \ \ \ \ \ int\ nowprecision\ =\ 1;         int nowprecision = 1;
         a u x . a s s i g n &lt; i n t &gt;   ( n u m ) ; \ \ \ \ \ \ \ \ aux.assign&lt;int&gt;\ (num);         aux.assign<int> (num);
         f o r   ( ;   n o w p r e c i s i o n   &lt; =   l e n g t h   −   q . l e n g t h ;   n o w p r e c i s i o n   &lt; &lt; =   1 ) \ \ \ \ \ \ \ \ for\ (;\ nowprecision\ &lt;=\ length\ -\ q.length;\ nowprecision\ &lt;&lt;=\ 1)         for (; nowprecision <= length  q.length; nowprecision <<= 1)
         { \ \ \ \ \ \ \ \ \{         {
             a u x 1. c l e a r ( ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux1.clear();             aux1.clear();
             a u x 1. l e n g t h   =   ( n o w p r e c i s i o n   &lt; &lt;   1 )   +   3 ,   a u x 1. s i g   =   1 ; \ \ \ \ \ \ \ \ \ \ \ \ aux1.length\ =\ (nowprecision\ &lt;&lt;\ 1)\ +\ 3,\ aux1.sig\ =\ 1;             aux1.length = (nowprecision << 1) + 3, aux1.sig = 1;
             f o r   ( i n t   i   =   q . l e n g t h   −   a u x 1. l e n g t h ;   i   &lt;   q . l e n g t h ;   + + i ) \ \ \ \ \ \ \ \ \ \ \ \ for\ (int\ i\ =\ q.length\ -\ aux1.length;\ i\ &lt;\ q.length;\ ++i)             for (int i = q.length  aux1.length; i < q.length; ++i)
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 a u x 1. a [ i   −   q . l e n g t h   +   a u x 1. l e n g t h ]   =   i   &gt; =   0   ?   q . a [ i ]   :   0 ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ aux1.a[i\ -\ q.length\ +\ aux1.length]\ =\ i\ &gt;=\ 0\ ?\ q.a[i]\ :\ 0;                 aux1.a[i  q.length + aux1.length] = i >= 0 ? q.a[i] : 0;
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
             a u x 1. m u l t ( a u x ) ,   a u x 1. r i g h t s h i f t ( n o w p r e c i s i o n   +   2 ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux1.mult(aux),\ aux1.rightshift(nowprecision\ +\ 2);             aux1.mult(aux), aux1.rightshift(nowprecision + 2);
             a u x 1. m u l t ( a u x ) ,   a u x 1. r i g h t s h i f t ( n o w p r e c i s i o n   +   2 ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux1.mult(aux),\ aux1.rightshift(nowprecision\ +\ 2);             aux1.mult(aux), aux1.rightshift(nowprecision + 2);
             a u x . m u l t ( 2 ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux.mult(2);             aux.mult(2);
             a u x . l e f t s h i f t ( n o w p r e c i s i o n ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux.leftshift(nowprecision);             aux.leftshift(nowprecision);
             a u x . m i n u s ( a u x 1 ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux.minus(aux1);             aux.minus(aux1);
         } \ \ \ \ \ \ \ \ \}         }
         a u x . m u l t ( ∗ t h i s ) ; \ \ \ \ \ \ \ \ aux.mult(*this);         aux.mult(this);
         a u x . r i g h t s h i f t ( q . l e n g t h   +   n o w p r e c i s i o n   +   1 ) ; \ \ \ \ \ \ \ \ aux.rightshift(q.length\ +\ nowprecision\ +\ 1);         aux.rightshift(q.length + nowprecision + 1);
         a u x 1. a s s i g n ( a u x ) ; \ \ \ \ \ \ \ \ aux1.assign(aux);         aux1.assign(aux);
         a u x 1. m u l t ( q ) ; \ \ \ \ \ \ \ \ aux1.mult(q);         aux1.mult(q);
         m i n u s ( a u x 1 ) ; \ \ \ \ \ \ \ \ minus(aux1);         minus(aux1);
         i n t   f l a g   =   a b s g r e a t e r e q u a l ( q )   ?   2   :   s i g   &lt;   0   ?   1   :   0 ; \ \ \ \ \ \ \ \ int\ flag\ =\ absgreaterequal(q)\ ?\ 2\ :\ sig\ &lt;\ 0\ ?\ 1\ :\ 0;         int flag = absgreaterequal(q) ? 2 : sig < 0 ? 1 : 0;
         a s s i g n ( a u x ) ; \ \ \ \ \ \ \ \ assign(aux);         assign(aux);
         i f   ( f l a g ) \ \ \ \ \ \ \ \ if\ (flag)         if (flag)
         { \ \ \ \ \ \ \ \ \{         {
             f l a g   = =   1   ?   m i n u s o n e ( )   :   a d d o n e ( ) ; \ \ \ \ \ \ \ \ \ \ \ \ flag\ ==\ 1\ ?\ minusone()\ :\ addone();             flag == 1 ? minusone() : addone();
         } \ \ \ \ \ \ \ \ \}         }
         i f   ( ! n e g 2 ) \ \ \ \ \ \ \ \ if\ (!neg2)         if (!neg2)
         { \ \ \ \ \ \ \ \ \{         {
             q . n e g ( ) ; \ \ \ \ \ \ \ \ \ \ \ \ q.neg();             q.neg();
         } \ \ \ \ \ \ \ \ \}         }
         s i g   ∗ =   n e g 1   ∧   n e g 2   ?   − 1   :   1 ; \ \ \ \ \ \ \ \ sig\ *=\ neg1\ \wedge \ neg2\ ?\ -1\ :\ 1;         sig = neg1  neg2 ? 1 : 1;
     } \ \ \ \ \}     }

     i n t   d i v i d e ( i n t   q ) \ \ \ \ int\ divide(int\ q)     int divide(int q)
     { \ \ \ \ \{     {
         i f   ( ! s i g   ∣ ∣   ! q ) \ \ \ \ \ \ \ \ if\ (!sig\ ||\ !q)         if (!sig  !q)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   0 ; \ \ \ \ \ \ \ \ \ \ \ \ return\ 0;             return 0;
         } \ \ \ \ \ \ \ \ \}         }
         l l   r e m a i n   =   0 ,   x   =   s t d : : a b s ( q ) ; \ \ \ \ \ \ \ \ ll\ remain\ =\ 0,\ x\ =\ std::abs(q);         ll remain = 0, x = std::abs(q);
         f o r   ( i n t   i   =   l e n g t h   −   1 ;   i   &gt; =   0 ;   − − i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ length\ -\ 1;\ i\ &gt;=\ 0;\ --i)         for (int i = length  1; i >= 0; i)
         { \ \ \ \ \ \ \ \ \{         {
             r e m a i n   =   r e m a i n   ∗   10   +   a [ i ] ; \ \ \ \ \ \ \ \ \ \ \ \ remain\ =\ remain\ *\ 10\ +\ a[i];             remain = remain  10 + a[i];
             a [ i ]   =   ( i n t ) ( r e m a i n   /   x ) ; \ \ \ \ \ \ \ \ \ \ \ \ a[i]\ =\ (int)(remain\ /\ x);             a[i] = (int)(remain / x);
             r e m a i n   % =   x ; \ \ \ \ \ \ \ \ \ \ \ \ remain\ \%=\ x;             remain %= x;
         } \ \ \ \ \ \ \ \ \}         }
         f o r   ( ;   l e n g t h   &amp; &amp;   ! a [ l e n g t h   −   1 ] ;   − − l e n g t h )   ; \ \ \ \ \ \ \ \ for\ (;\ length\ \&amp;\&amp;\ !a[length\ -\ 1];\ --length)\ ;         for (; length && !a[length  1]; length) ;
         r e m a i n   ∗ =   s i g ; \ \ \ \ \ \ \ \ remain\ *=\ sig;         remain = sig;
         s i g   ∗ =   q   &lt;   0   ?   − 1   :   1 ; \ \ \ \ \ \ \ \ sig\ *=\ q\ &lt;\ 0\ ?\ -1\ :\ 1;         sig = q < 0 ? 1 : 1;
         i f   ( ! l e n g t h ) \ \ \ \ \ \ \ \ if\ (!length)         if (!length)
         { \ \ \ \ \ \ \ \ \{         {
             s i g   =   0 ; \ \ \ \ \ \ \ \ \ \ \ \ sig\ =\ 0;             sig = 0;
         } \ \ \ \ \ \ \ \ \}         }
         r e t u r n   ( i n t ) r e m a i n ; \ \ \ \ \ \ \ \ return\ (int)remain;         return (int)remain;
     } \ \ \ \ \}     }

     v o i d   s q r t ( ) \ \ \ \ void\ sqrt()     void sqrt()
     { \ \ \ \ \{     {
         s t a t i c   B i g I n t e g e r   a u x ,   a u x 1 ,   a u x 2 ; \ \ \ \ \ \ \ \ static\ BigInteger\ aux,\ aux1,\ aux2;         static BigInteger aux, aux1, aux2;
         i f   ( s i g   &lt; =   0 ) \ \ \ \ \ \ \ \ if\ (sig\ &lt;=\ 0)         if (sig <= 0)
         { \ \ \ \ \ \ \ \ \{         {
             r e t u r n   ; \ \ \ \ \ \ \ \ \ \ \ \ return\ ;             return ;
         } \ \ \ \ \ \ \ \ \}         }
         i n t   n u m   =   0 ; \ \ \ \ \ \ \ \ int\ num\ =\ 0;         int num = 0;
         f o r   ( i n t   i   =   l e n g t h   −   1 ;   i   &gt; =   l e n g t h   −   8 ;   − − i ) \ \ \ \ \ \ \ \ for\ (int\ i\ =\ length\ -\ 1;\ i\ &gt;=\ length\ -\ 8;\ --i)         for (int i = length  1; i >= length  8; i)
         { \ \ \ \ \ \ \ \ \{         {
             ( n u m   ∗ =   10 )   + =   i   &gt; =   0   ?   a [ i ]   :   0 ; \ \ \ \ \ \ \ \ \ \ \ \ (num\ *=\ 10)\ +=\ i\ &gt;=\ 0\ ?\ a[i]\ :\ 0;             (num = 10) += i >= 0 ? a[i] : 0;
         } \ \ \ \ \ \ \ \ \}         }
         l l   x   =   l e n g t h   &amp;   1   ?   10000000000000 l l   :   100000000000000 l l ; \ \ \ \ \ \ \ \ ll\ x\ =\ length\ \&amp;\ 1\ ?\ 10000000000000ll\ :\ 100000000000000ll;         ll x = length & 1 ? 10000000000000ll : 100000000000000ll;
         n u m   =   s t d : : s q r t ( 1.0   ∗   x   /   n u m ) ; \ \ \ \ \ \ \ \ num\ =\ std::sqrt(1.0\ *\ x\ /\ num);         num = std::sqrt(1.0  x / num);
         i n t   n o w p r e c i s i o n   =   2 ; \ \ \ \ \ \ \ \ int\ nowprecision\ =\ 2;         int nowprecision = 2;
         a u x . a s s i g n &lt; i n t &gt;   ( n u m ) ; \ \ \ \ \ \ \ \ aux.assign&lt;int&gt;\ (num);         aux.assign<int> (num);
         f o r   ( ;   n o w p r e c i s i o n   &lt; =   ( l e n g t h   &gt; &gt;   1 )   +   1 ;   n o w p r e c i s i o n   =   ( n o w p r e c i s i o n   &lt; &lt;   1 )   −   1 ) \ \ \ \ \ \ \ \ for\ (;\ nowprecision\ &lt;=\ (length\ &gt;&gt;\ 1)\ +\ 1;\ nowprecision\ =\ (nowprecision\ &lt;&lt;\ 1)\ -\ 1)         for (; nowprecision <= (length >> 1) + 1; nowprecision = (nowprecision << 1)  1)
         { \ \ \ \ \ \ \ \ \{         {
             a u x 1. c l e a r ( ) ,   a u x 2. c l e a r ( ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux1.clear(),\ aux2.clear();             aux1.clear(), aux2.clear();
             a u x 1. l e n g t h   =   ( n o w p r e c i s i o n   &lt; &lt;   1 )   +   1   +   ( l e n g t h   &amp;   1 ) ,   a u x 1. s i g   =   1 ; \ \ \ \ \ \ \ \ \ \ \ \ aux1.length\ =\ (nowprecision\ &lt;&lt;\ 1)\ +\ 1\ +\ (length\ \&amp;\ 1),\ aux1.sig\ =\ 1;             aux1.length = (nowprecision << 1) + 1 + (length & 1), aux1.sig = 1;
             f o r   ( i n t   i   =   l e n g t h   −   a u x 1. l e n g t h ;   i   &lt;   l e n g t h ;   + + i ) \ \ \ \ \ \ \ \ \ \ \ \ for\ (int\ i\ =\ length\ -\ aux1.length;\ i\ &lt;\ length;\ ++i)             for (int i = length  aux1.length; i < length; ++i)
             { \ \ \ \ \ \ \ \ \ \ \ \ \{             {
                 a u x 1. a [ i   −   l e n g t h   +   a u x 1. l e n g t h ]   =   i   &gt; =   0   ?   a [ i ]   :   0 ; \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ aux1.a[i\ -\ length\ +\ aux1.length]\ =\ i\ &gt;=\ 0\ ?\ a[i]\ :\ 0;                 aux1.a[i  length + aux1.length] = i >= 0 ? a[i] : 0;
             } \ \ \ \ \ \ \ \ \ \ \ \ \}             }
             a u x 1. m u l t ( a u x ) ,   a u x 1. r i g h t s h i f t ( n o w p r e c i s i o n   +   1 ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux1.mult(aux),\ aux1.rightshift(nowprecision\ +\ 1);             aux1.mult(aux), aux1.rightshift(nowprecision + 1);
             a u x 1. m u l t ( a u x ) ,   a u x 1. r i g h t s h i f t ( n o w p r e c i s i o n   +   1 ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux1.mult(aux),\ aux1.rightshift(nowprecision\ +\ 1);             aux1.mult(aux), aux1.rightshift(nowprecision + 1);
             a u x 1. d i v i d e ( 2 ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux1.divide(2);             aux1.divide(2);
             a u x 2. l e n g t h   =   ( n o w p r e c i s i o n   +   1 )   &lt; &lt;   1 ,   a u x 2. s i g   =   1 ; \ \ \ \ \ \ \ \ \ \ \ \ aux2.length\ =\ (nowprecision\ +\ 1)\ &lt;&lt;\ 1,\ aux2.sig\ =\ 1;             aux2.length = (nowprecision + 1) << 1, aux2.sig = 1;
             a u x 2. a [ a u x 2. l e n g t h   −   1 ]   =   1 ,   a u x 2. a [ a u x 2. l e n g t h   −   2 ]   =   5 ; \ \ \ \ \ \ \ \ \ \ \ \ aux2.a[aux2.length\ -\ 1]\ =\ 1,\ aux2.a[aux2.length\ -\ 2]\ =\ 5;             aux2.a[aux2.length  1] = 1, aux2.a[aux2.length  2] = 5;
             a u x 2. m i n u s ( a u x 1 ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux2.minus(aux1);             aux2.minus(aux1);
             a u x . m u l t ( a u x 2 ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux.mult(aux2);             aux.mult(aux2);
             a u x . r i g h t s h i f t ( n o w p r e c i s i o n   +   2 ) ; \ \ \ \ \ \ \ \ \ \ \ \ aux.rightshift(nowprecision\ +\ 2);             aux.rightshift(nowprecision + 2);
         } \ \ \ \ \ \ \ \ \}         }
         a u x . m u l t ( ∗ t h i s ) ; \ \ \ \ \ \ \ \ aux.mult(*this);         aux.mult(this);
         a u x . r i g h t s h i f t ( ( l e n g t h   &gt; &gt;   1 )   +   n o w p r e c i s i o n   +   1 ) ; \ \ \ \ \ \ \ \ aux.rightshift((length\ &gt;&gt;\ 1)\ +\ nowprecision\ +\ 1);         aux.rightshift((length >> 1) + nowprecision + 1);
         a u x 1. a s s i g n ( a u x ) ; \ \ \ \ \ \ \ \ aux1.assign(aux);         aux1.assign(aux);
         a u x 1. m u l t ( a u x 1 ) ; \ \ \ \ \ \ \ \ aux1.mult(aux1);         aux1.mult(aux1);
         a u x 2. a s s i g n ( ∗ t h i s ) ; \ \ \ \ \ \ \ \ aux2.assign(*this);         aux2.assign(this);
         a u x 2. m u l t ( 2 ) ; \ \ \ \ \ \ \ \ aux2.mult(2);         aux2.mult(2);
         m i n u s ( a u x 1 ) ; \ \ \ \ \ \ \ \ minus(aux1);         minus(aux1);
         i n t   f l a g   =   g r e a t e r ( a u x 2 )   ?   2   :   s i g   &lt;   0   ?   1   :   0 ; \ \ \ \ \ \ \ \ int\ flag\ =\ greater(aux2)\ ?\ 2\ :\ sig\ &lt;\ 0\ ?\ 1\ :\ 0;         int flag = greater(aux2) ? 2 : sig < 0 ? 1 : 0;
         a s s i g n ( a u x ) ; \ \ \ \ \ \ \ \ assign(aux);         assign(aux);
         i f   ( f l a g ) \ \ \ \ \ \ \ \ if\ (flag)         if (flag)
         { \ \ \ \ \ \ \ \ \{         {
             f l a g   = =   1   ?   m i n u s o n e ( )   :   a d d o n e ( ) ; \ \ \ \ \ \ \ \ \ \ \ \ flag\ ==\ 1\ ?\ minusone()\ :\ addone();             flag == 1 ? minusone() : addone();
         } \ \ \ \ \ \ \ \ \}         }
     } \ \ \ \ \}     }
} ; \}; };

B i g I n t e g e r   a ,   b ,   c ; BigInteger\ a,\ b,\ c; BigInteger a, b, c;

i n t   m a i n ( ) int\ main() int main()
{ \{ {
     a . r e a d ( ) ; \ \ \ \ a.read();     a.read();
     b . r e a d ( ) ; \ \ \ \ b.read();     b.read();

     c . a s s i g n ( a ) ; \ \ \ \ c.assign(a);     c.assign(a);
     a . d i v i d e ( b ) ; \ \ \ \ a.divide(b);     a.divide(b);
     a . w r i t e ( ) ; \ \ \ \ a.write();     a.write();
     p u t c h a r ( ′ \ n ′ ) ; \ \ \ \ putchar(&#x27;\backslash n&#x27;);     putchar(\n);

     a . m u l t ( b ) ; \ \ \ \ a.mult(b);     a.mult(b);
     c . m i n u s ( a ) ; \ \ \ \ c.minus(a);     c.minus(a);
     c . w r i t e ( ) ; \ \ \ \ c.write();     c.write();
     p u t c h a r ( ′ \ n ′ ) ; \ \ \ \ putchar(&#x27;\backslash n&#x27;);     putchar(\n);

     r e t u r n   0 ; \ \ \ \ return\ 0;     return 0;
} \} }
$

<think>好的,用户想了解如何配置环境来输入LaTeX代码。我需要根据提供的引用内容来整理步骤。首先,引用[1]和[3]提到需要安装TeXLive或MiKTeX,它们是TeX的发行版,包含必要的组件。然后,用户需要一个编辑器,比如VSCode,引用[3]提到安装Chinese语言包和LaTeX Workshop插件。接下来,配置VSCode的LaTeX环境,设置编译工具和预览方式。可能还需要调整设置文件,比如settings.json,确保路径正确。用户可能遇到的问题包括中文支持、编译错误,需要检查路径和插件是否正确安装。最后,建议用户验证安装并尝试编写简单文档测试。</think>### 如何配置LaTeX代码编写环境 #### 1. 安装TeX发行版(核心运行环境) - **TeXLive**(跨平台推荐): - 支持Windows/Linux/macOS系统 - 包含完整的宏包和字体库 - 安装命令示例(Linux): ```bash sudo apt-get install texlive-full ``` - **MiKTeX**(Windows轻量版): - 提供按需安装功能 - 自动更新宏包[^1] #### 2. 配置编辑器(以VSCode为例) - **安装中文语言包**: - 在VSCode扩展商店搜索`Chinese (Simplified) Language Pack`并安装[^3] - **安装LaTeX插件**: - 搜索安装`LaTeX Workshop`扩展 - 支持实时预览、代码高亮、编译错误提示 #### 3. 配置LaTeX编译环境(关键设置) ```json // settings.json配置示例 { "latex-workshop.latex.tools": [ { "name": "xelatex", "command": "xelatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOC%" ] } ], "latex-workshop.view.pdf.viewer": "tab" } ``` 此配置启用XeLaTeX编译器并支持中文字体处理[^2][^3] #### 4. 验证环境配置 创建测试文件`test.tex`: ```latex \documentclass{article} \usepackage{ctex} % 中文支持包 \begin{document} 你好,LaTeX! $E=mc^2$ \end{document} ``` 使用`Ctrl+S`保存后,按`Ctrl+Alt+B`编译生成PDF ### 常见问题解决方案 1. **中文显示异常**: - 确保文档类包含`ctex`宏包 - 使用XeLaTeX编译器 2. **找不到宏包**: - 通过MiKTeX控制台安装缺失宏包 - 或使用`tlmgr install <package>`(TeXLive) ### 效率提升技巧 - 使用代码片段(Snippets)快速输入环境模板 - 配置正向/反向搜索实现代码与PDF的定位跳转 - 设置自动编译保存(需在设置中开启`latex-workshop.latex.autoBuild.onSave`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值