找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 3093|回复: 5

大整数运算

[复制链接]
发表于 2014-4-19 12:42:48 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
@0xaa55写了一个,我也来了兴趣
直接上代码吧,还没写完,乘法写了一半,除法还没写,除了乘法以外,其他的都没测试,可能有bug


  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <time.h>

  5. using namespace std;

  6. class LargeInteger
  7. {
  8. public:
  9.         vector<int> data;//[0]低位        [N]高位   每个元素不超过0xFFFF
  10.         mutable bool sign;//true=-   false=+
  11.         enum {MAXBIT=sizeof(int)*8/2,MAXCELL=(2<<(MAXBIT-1))-1};//每个单元只用一半的bit位,剩下的用于进位

  12.         LargeInteger()
  13.         {
  14.                 data.push_back(0);
  15.         }

  16.         LargeInteger(const LargeInteger& val):data(val.data),sign(val.sign)
  17.         {
  18.                
  19.         }

  20.         LargeInteger(const short val)
  21.         {
  22.                 if(val > 0)
  23.                 {
  24.                         data.push_back(val);
  25.                         sign=false;
  26.                 }
  27.                 else
  28.                 {
  29.                         data.push_back(-val);
  30.                         sign=true;
  31.                 }
  32.         }

  33.         const LargeInteger& operator=(const short val)
  34.         {
  35.                 data.clear();
  36.                 if(val > 0)
  37.                 {
  38.                         data.push_back(val);
  39.                         sign=false;
  40.                 }
  41.                 else
  42.                 {
  43.                         data.push_back(-val);
  44.                         sign=true;
  45.                 }
  46.                 return *this;
  47.         }

  48.         const LargeInteger& operator=(const LargeInteger& val)
  49.         {
  50.                 data.resize(val.data.size());
  51.                 for(int i=0;i<data.size();i++)
  52.                 {
  53.                         data[i]=val.data[i];
  54.                 }
  55.                 sign=val.sign;
  56.                 return *this;
  57.         }

  58.         const LargeInteger& operator+=(const short val)//L+I
  59.         {
  60.                 if(sign)//-L
  61.                 {
  62.                         if(val<0)//-I
  63.                         {//L = L+I = -(-L)-(-I) = -((-L)+(-I))
  64.                                 data[0] -= val;
  65.                                 if(data[0]>>MAXBIT)
  66.                                 {
  67.                                         if(data.size() == 1)
  68.                                         {
  69.                                                 data.push_back(0);
  70.                                         }
  71.                                         data[0] &= MAXCELL;
  72.                                         data[1]++;
  73.                                 }
  74.                         }
  75.                         else//+I
  76.                         {//L = L+I = -(-L)+I = -((-L)-I)
  77.                                 -*this;
  78.                                 *this -= val;
  79.                                 -*this;
  80.                         }
  81.                 }
  82.                 else//+L
  83.                 {
  84.                         if(val>0)//+I
  85.                         {//L = L+I
  86.                                 data[0] += val;
  87.                                 if(data[0]>>MAXBIT)
  88.                                 {
  89.                                         if(data.size() == 1)
  90.                                         {
  91.                                                 data.push_back(0);
  92.                                         }
  93.                                         data[0] &= MAXCELL;
  94.                                         data[1]++;
  95.                                 }
  96.                         }
  97.                         else//-I
  98.                         {//L = L+I = L-(-I)
  99.                                 *this -= (-val);
  100.                         }
  101.                 }       
  102.                 return *this;
  103.         }

  104.         const LargeInteger& operator+=(const LargeInteger& val)//L1+L2
  105.         {
  106.                 if(sign)//-L1
  107.                 {
  108.                         if(val.sign)//-L2
  109.                         {//L1 = L1+L2 = -((-L1)+(-L2))
  110.                                 if(val.data.size()>data.size())
  111.                                 {
  112.                                         data.resize(val.data.size(),0);
  113.                                 }
  114.                                 int c=0;
  115.                                 for(int i=0;i<data.size();i++)
  116.                                 {
  117.                                         data[i] += val.data[i]+c;
  118.                                         c=0;
  119.                                         if(data[i]>>MAXBIT)
  120.                                         {
  121.                                                 data[i] &= MAXCELL;
  122.                                                 c=1;
  123.                                         }
  124.                                 }
  125.                                 if(c)
  126.                                 {
  127.                                         data.push_back(1);
  128.                                 }
  129.                         }
  130.                         else//+L2
  131.                         {//L1 = L1+L2 = -(-L1)+L2 = -((-L1)-L2)
  132.                                 -*this;
  133.                                 *this -= val;
  134.                                 -*this;
  135.                         }
  136.                 }
  137.                 else//+L1
  138.                 {
  139.                         if(!val.sign)//+L2
  140.                         {//L1 = L1+L2
  141.                                 if(val.data.size()>data.size())
  142.                                 {
  143.                                         data.resize(val.data.size(),0);
  144.                                 }
  145.                                 int c=0;
  146.                                 for(int i=0;i<data.size();i++)
  147.                                 {
  148.                                         data[i] += val.data[i]+c;
  149.                                         c=0;
  150.                                         if(data[i]>>MAXBIT)
  151.                                         {
  152.                                                 data[i] &= MAXCELL;
  153.                                                 c=1;
  154.                                         }
  155.                                 }
  156.                                 if(c)
  157.                                 {
  158.                                         data.push_back(1);
  159.                                 }
  160.                         }
  161.                         else//-L2
  162.                         {//L1 = L1+L2 = L1-(-L2)
  163.                                 *this -= (-val);
  164.                         }
  165.                 }

  166.                 return *this;
  167.         }

  168.         const LargeInteger& operator-=(const short val)//L-I
  169.         {
  170.                 if(sign)//-L
  171.                 {
  172.                         if(val<0)//-I
  173.                         {//L = L-I = -((-L)-(-I))
  174.                                 -*this;
  175.                                 *this -= (-val);
  176.                                 -*this;
  177.                         }
  178.                         else//+I
  179.                         {//L = L-I = -(-L)-I = -((-L)+I)
  180.                                 -*this;
  181.                                 *this += val;
  182.                                 -*this;
  183.                         }
  184.                 }
  185.                 else//+L
  186.                 {
  187.                         if(val>0)//+I
  188.                         {//L = L-I
  189.                                 if(data.size() == 1 && data[0] < val)//L<I
  190.                                 {
  191.                                         sign=true;
  192.                                         data[0] = val-data[0];
  193.                                 }
  194.                                 else
  195.                                 {
  196.                                         data[0] -= val;
  197.                                         for(int i=0;i<data.size()-1;i++)
  198.                                         {//借位
  199.                                                 if(data[i]<0)
  200.                                                 {
  201.                                                         data[i] += MAXCELL;
  202.                                                         data[i+1]--;
  203.                                                 }
  204.                                                 else
  205.                                                         break;
  206.                                         }
  207.                                         if(data.size()>1 && data.back() == 0)
  208.                                                 data.pop_back();
  209.                                 }
  210.                         }
  211.                         else//-I
  212.                         {//L = L-I = L+(-I)
  213.                                 *this += (-val);
  214.                         }
  215.                 }
  216.                 return *this;
  217.         }

  218.         const LargeInteger& operator-=(const LargeInteger& val)
  219.         {
  220.                 if(sign)//-L
  221.                 {
  222.                         if(val.sign)//-I
  223.                         {//L = L-I = -((-L)-(-I))
  224.                                 -*this;
  225.                                 *this -= (-val);
  226.                                 -*this;
  227.                         }
  228.                         else//+I
  229.                         {//L = L-I = -(-L)-I = -((-L)+I)
  230.                                 -*this;
  231.                                 *this += val;
  232.                                 -*this;
  233.                         }
  234.                 }
  235.                 else//+L
  236.                 {
  237.                         if(!val.sign)//+I
  238.                         {//L = L-I
  239.                                 int len=data.size();
  240.                                 //先比较大小
  241.                                 if(*this >= val)
  242.                                 {//L>I
  243.                                         for(int i=0;i<len && i<val.data.size();i++)
  244.                                         {
  245.                                                 data[i] -= val.data[i];
  246.                                                 if(data[i]<0)
  247.                                                 {
  248.                                                         data[i] += MAXCELL;
  249.                                                         data[i+1]--;
  250.                                                 }
  251.                                         }
  252.                                 }
  253.                                 else
  254.                                 {//变换长度
  255.                                         sign=true;
  256.                                         len=val.data.size();
  257.                                         data.resize(len+1,0);
  258.                                         int c=0;
  259.                                         for(int i=0;i<len+1;i++)
  260.                                         {
  261.                                                 data[i]=val.data[i]-data[i];
  262.                                                 if(data[i]<0)
  263.                                                 {
  264.                                                         data[i+1]--;
  265.                                                         data[i] += MAXCELL;
  266.                                                 }
  267.                                         }
  268.                                         //367-456=-1 1 1= 1 -1 -1  -89
  269.                                         //263-456=-2 1 -3=2 -1 3   -193
  270.                                         //348-456=-1 -1 2=1 1 -2   -108
  271.                                         //123-456=-3 -3 -3=3 3 3   -333
  272.                                        
  273.                                 }
  274.                                 for(int i=len-1;i>=1;i--)
  275.                                 {//去除多余的0段
  276.                                         if(data[i] == 0)
  277.                                                 data.pop_back();
  278.                                         else
  279.                                                 break;
  280.                                 }

  281.                                 if(data.size() == 1 && data[0] < val.data[0])//L<I
  282.                                 {
  283.                                         sign=true;
  284.                                         data[0] = val.data[0]-data[0];
  285.                                 }
  286.                                 else
  287.                                 {
  288.                                         data[0] -= val.data[0];
  289.                                         for(int i=0;i<data.size()-1;i++)
  290.                                         {//借位
  291.                                                 if(data[i]<0)
  292.                                                 {
  293.                                                         data[i] += MAXCELL;
  294.                                                         data[i+1]--;
  295.                                                 }
  296.                                                 else
  297.                                                         break;
  298.                                         }
  299.                                         if(data.size()>1 && data.back() == 0)
  300.                                                 data.pop_back();
  301.                                 }
  302.                         }
  303.                         else//-I
  304.                         {//L = L-I = L+(-I)
  305.                                 *this += (-val);
  306.                         }
  307.                 }
  308.                 return *this;
  309.         }

  310.         const LargeInteger& operator-() const//相反数会改变本身
  311.         {
  312.                 sign = !sign;
  313.                 return *this;
  314.         }

  315.         bool operator>=(const LargeInteger& val)
  316.         {
  317.                 if(data.size()>val.data.size())
  318.                         return true;
  319.                 else if(data.size()<val.data.size())
  320.                         return false;
  321.                 else
  322.                 {
  323.                         for(int i=data.size()-1;i>=0;i++)
  324.                         {
  325.                                 if(data[i]<val.data[i])
  326.                                         return false;
  327.                         }
  328.                         return true;
  329.                 }
  330.         }

  331.         const LargeInteger& operator*=(short val)
  332.         {
  333.                 int c=0;
  334.                 if(val<0)
  335.                 {
  336.                         val=-val;
  337.                         sign=!sign;
  338.                 }
  339.                 for(int i=0;i<data.size();i++)
  340.                 {
  341.                         data[i]=data[i]*val+c;
  342.                         c=0;
  343.                         if(data[i]>>MAXBIT)
  344.                         {
  345.                                 c=data[i]>>MAXBIT;
  346.                                 data[i] &= MAXCELL;
  347.                         }
  348.                 }
  349.                 if(c)
  350.                 {
  351.                         data.push_back(c);
  352.                 }
  353.                 return *this;
  354.         }

  355.         friend ostream& operator<<(ostream& outs,const LargeInteger& val);
  356. };

  357. ostream& operator<<(ostream& outs,LargeInteger& val)
  358. {
  359.         if(val.sign)
  360.                 outs<<'-';
  361.         int len=val.data.size();
  362.         outs.flags(outs.hex);

  363.         for(int i=len-1;i>=0;i--)
  364.         {       
  365.                 outs.fill('0');
  366.                 outs.width(4);
  367.                 outs.precision(4);
  368.                 outs<<val.data[i];
  369.         }       

  370.         return outs;
  371. }

  372. void main()
  373. {
  374.         LargeInteger li=1;
  375.         time_t begin=time(NULL);
  376.         for(short i=1;i<0x7FFF;i++)
  377.         {
  378.                 li *= i;       
  379.         }
  380.         cout<<"fact "<<i<<"="<<li<<endl;
  381.         cout<<"time:"<<time(NULL)-begin<<endl;
  382. }


复制代码


回复

使用道具 举报

发表于 2014-4-19 19:22:14 | 显示全部楼层
我的之所以算得慢就是因为能输出10进制数。
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2014-4-19 23:44:25 | 显示全部楼层
别的别说了,和我一起写吧
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2014-4-22 11:23:12 | 显示全部楼层

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <time.h>
  5. #include <fstream>

  6. using namespace std;

  7. enum
  8. {
  9.         MAXBIT=sizeof(int)*8/2,
  10.         MAXCELL=(2<<(MAXBIT-1))-1,
  11.         FACTOR=2<<(MAXBIT-1),
  12.         MAXDEC=10000,
  13. };//每个单元只用一半的bit位,剩下的用于进位

  14. class LargeInteger
  15. {
  16. public:
  17.         vector<int> data;//[0]低位        [N]高位   每个元素不超过0xFFFF
  18.         mutable bool sign;//true=-   false=+

  19.         LargeInteger()
  20.         {
  21.                 data.push_back(0);
  22.         }

  23.         LargeInteger(const LargeInteger& val):data(val.data),sign(val.sign)
  24.         {
  25.                
  26.         }

  27.         LargeInteger(const short val)
  28.         {
  29.                 if(val > 0)
  30.                 {
  31.                         data.push_back(val);
  32.                         sign=false;
  33.                 }
  34.                 else
  35.                 {
  36.                         data.push_back(-val);
  37.                         sign=true;
  38.                 }
  39.         }

  40.         const LargeInteger& operator=(const short val)
  41.         {
  42.                 data.clear();
  43.                 if(val > 0)
  44.                 {
  45.                         data.push_back(val);
  46.                         sign=false;
  47.                 }
  48.                 else
  49.                 {
  50.                         data.push_back(-val);
  51.                         sign=true;
  52.                 }
  53.                 return *this;
  54.         }

  55.         const LargeInteger& operator=(const LargeInteger& val)
  56.         {
  57.                 data.resize(val.data.size());
  58.                 for(int i=0;i<data.size();i++)
  59.                 {
  60.                         data[i]=val.data[i];
  61.                 }
  62.                 sign=val.sign;
  63.                 return *this;
  64.         }

  65.         const LargeInteger& operator+=(const short val)//L+I
  66.         {
  67.                 if(sign)//-L
  68.                 {
  69.                         if(val<0)//-I
  70.                         {//L = L+I = -(-L)-(-I) = -((-L)+(-I))
  71.                                 data[0] -= val;
  72.                                 if(data[0]>>MAXBIT)
  73.                                 {
  74.                                         if(data.size() == 1)
  75.                                         {
  76.                                                 data.push_back(0);
  77.                                         }
  78.                                         data[0] &= MAXCELL;
  79.                                         data[1]++;
  80.                                 }
  81.                         }
  82.                         else//+I
  83.                         {//L = L+I = -(-L)+I = -((-L)-I)
  84.                                 -*this;
  85.                                 *this -= val;
  86.                                 -*this;
  87.                         }
  88.                 }
  89.                 else//+L
  90.                 {
  91.                         if(val>0)//+I
  92.                         {//L = L+I
  93.                                 data[0] += val;
  94.                                 if(data[0]>>MAXBIT)
  95.                                 {
  96.                                         if(data.size() == 1)
  97.                                         {
  98.                                                 data.push_back(0);
  99.                                         }
  100.                                         data[0] &= MAXCELL;
  101.                                         data[1]++;
  102.                                 }
  103.                         }
  104.                         else//-I
  105.                         {//L = L+I = L-(-I)
  106.                                 *this -= (-val);
  107.                         }
  108.                 }       
  109.                 return *this;
  110.         }

  111.         const LargeInteger& operator+=(const LargeInteger& val)//L1+L2
  112.         {
  113.                 if(sign)//-L1
  114.                 {
  115.                         if(val.sign)//-L2
  116.                         {//L1 = L1+L2 = -((-L1)+(-L2))
  117.                                 if(val.data.size()>data.size())
  118.                                 {
  119.                                         data.resize(val.data.size(),0);
  120.                                 }
  121.                                 int c=0;
  122.                                 for(int i=0;i<data.size();i++)
  123.                                 {
  124.                                         data[i] += val.data[i]+c;
  125.                                         c=0;
  126.                                         if(data[i]>>MAXBIT)
  127.                                         {
  128.                                                 data[i] &= MAXCELL;
  129.                                                 c=1;
  130.                                         }
  131.                                 }
  132.                                 if(c)
  133.                                 {
  134.                                         data.push_back(1);
  135.                                 }
  136.                         }
  137.                         else//+L2
  138.                         {//L1 = L1+L2 = -(-L1)+L2 = -((-L1)-L2)
  139.                                 -*this;
  140.                                 *this -= val;
  141.                                 -*this;
  142.                         }
  143.                 }
  144.                 else//+L1
  145.                 {
  146.                         if(!val.sign)//+L2
  147.                         {//L1 = L1+L2
  148.                                 if(val.data.size()>data.size())
  149.                                 {
  150.                                         data.resize(val.data.size(),0);
  151.                                 }
  152.                                 int c=0;
  153.                                 for(int i=0;i<data.size();i++)
  154.                                 {
  155.                                         data[i] += val.data[i]+c;
  156.                                         c=0;
  157.                                         if(data[i]>>MAXBIT)
  158.                                         {
  159.                                                 data[i] &= MAXCELL;
  160.                                                 c=1;
  161.                                         }
  162.                                 }
  163.                                 if(c)
  164.                                 {
  165.                                         data.push_back(1);
  166.                                 }
  167.                         }
  168.                         else//-L2
  169.                         {//L1 = L1+L2 = L1-(-L2)
  170.                                 *this -= (-val);
  171.                         }
  172.                 }

  173.                 return *this;
  174.         }

  175.         const LargeInteger& operator-=(const short val)//L-I
  176.         {
  177.                 if(sign)//-L
  178.                 {
  179.                         if(val<0)//-I
  180.                         {//L = L-I = -((-L)-(-I))
  181.                                 -*this;
  182.                                 *this -= (-val);
  183.                                 -*this;
  184.                         }
  185.                         else//+I
  186.                         {//L = L-I = -(-L)-I = -((-L)+I)
  187.                                 -*this;
  188.                                 *this += val;
  189.                                 -*this;
  190.                         }
  191.                 }
  192.                 else//+L
  193.                 {
  194.                         if(val>0)//+I
  195.                         {//L = L-I
  196.                                 if(data.size() == 1 && data[0] < val)//L<I
  197.                                 {
  198.                                         sign=true;
  199.                                         data[0] = val-data[0];
  200.                                 }
  201.                                 else
  202.                                 {
  203.                                         data[0] -= val;
  204.                                         for(int i=0;i<data.size()-1;i++)
  205.                                         {//借位
  206.                                                 if(data[i]<0)
  207.                                                 {
  208.                                                         data[i] += MAXCELL;
  209.                                                         data[i+1]--;
  210.                                                 }
  211.                                                 else
  212.                                                         break;
  213.                                         }
  214.                                         if(data.size()>1 && data.back() == 0)
  215.                                                 data.pop_back();
  216.                                 }
  217.                         }
  218.                         else//-I
  219.                         {//L = L-I = L+(-I)
  220.                                 *this += (-val);
  221.                         }
  222.                 }
  223.                 return *this;
  224.         }

  225.         const LargeInteger& operator-=(const LargeInteger& val)
  226.         {
  227.                 if(sign)//-L
  228.                 {
  229.                         if(val.sign)//-I
  230.                         {//L = L-I = -((-L)-(-I))
  231.                                 -*this;
  232.                                 *this -= (-val);
  233.                                 -*this;
  234.                         }
  235.                         else//+I
  236.                         {//L = L-I = -(-L)-I = -((-L)+I)
  237.                                 -*this;
  238.                                 *this += val;
  239.                                 -*this;
  240.                         }
  241.                 }
  242.                 else//+L
  243.                 {
  244.                         if(!val.sign)//+I
  245.                         {//L = L-I
  246.                                 int len=data.size();
  247.                                 //先比较大小
  248.                                 if(*this >= val)
  249.                                 {//L>I
  250.                                         for(int i=0;i<len && i<val.data.size();i++)
  251.                                         {
  252.                                                 data[i] -= val.data[i];
  253.                                                 if(data[i]<0)
  254.                                                 {
  255.                                                         data[i] += MAXCELL;
  256.                                                         data[i+1]--;
  257.                                                 }
  258.                                         }
  259.                                 }
  260.                                 else
  261.                                 {//变换长度
  262.                                         sign=true;
  263.                                         len=val.data.size();
  264.                                         data.resize(len+1,0);
  265.                                         int c=0;
  266.                                         for(int i=0;i<len+1;i++)
  267.                                         {
  268.                                                 data[i]=val.data[i]-data[i];
  269.                                                 if(data[i]<0)
  270.                                                 {
  271.                                                         data[i+1]--;
  272.                                                         data[i] += MAXCELL;
  273.                                                 }
  274.                                         }
  275.                                         //367-456=-1 1 1= 1 -1 -1  -89
  276.                                         //263-456=-2 1 -3=2 -1 3   -193
  277.                                         //348-456=-1 -1 2=1 1 -2   -108
  278.                                         //123-456=-3 -3 -3=3 3 3   -333
  279.                                        
  280.                                 }
  281.                                 for(int i=len-1;i>=1;i--)
  282.                                 {//去除多余的0段
  283.                                         if(data[i] == 0)
  284.                                                 data.pop_back();
  285.                                         else
  286.                                                 break;
  287.                                 }

  288.                                 if(data.size() == 1 && data[0] < val.data[0])//L<I
  289.                                 {
  290.                                         sign=true;
  291.                                         data[0] = val.data[0]-data[0];
  292.                                 }
  293.                                 else
  294.                                 {
  295.                                         data[0] -= val.data[0];
  296.                                         for(int i=0;i<data.size()-1;i++)
  297.                                         {//借位
  298.                                                 if(data[i]<0)
  299.                                                 {
  300.                                                         data[i] += MAXCELL;
  301.                                                         data[i+1]--;
  302.                                                 }
  303.                                                 else
  304.                                                         break;
  305.                                         }
  306.                                         if(data.size()>1 && data.back() == 0)
  307.                                                 data.pop_back();
  308.                                 }
  309.                         }
  310.                         else//-I
  311.                         {//L = L-I = L+(-I)
  312.                                 *this += (-val);
  313.                         }
  314.                 }
  315.                 return *this;
  316.         }

  317.         const LargeInteger& operator-() const//相反数会改变本身
  318.         {
  319.                 sign = !sign;
  320.                 return *this;
  321.         }

  322.         bool operator>=(const LargeInteger& val)
  323.         {
  324.                 if(data.size()>val.data.size())
  325.                         return true;
  326.                 else if(data.size()<val.data.size())
  327.                         return false;
  328.                 else
  329.                 {
  330.                         for(int i=data.size()-1;i>=0;i++)
  331.                         {
  332.                                 if(data[i]<val.data[i])
  333.                                         return false;
  334.                         }
  335.                         return true;
  336.                 }
  337.         }

  338.         const LargeInteger& operator++()
  339.         {
  340.                 if(sign)
  341.                 {//-
  342.                         int i=0;
  343.                         data[0]--;
  344.                         while(data[i]<0)
  345.                         {
  346.                                 data[i++] += MAXCELL;
  347.                                 data[i]--;
  348.                         }
  349.                         //除去多余0
  350.                         for(i=data.size()-1;i>0;i--)
  351.                         {
  352.                                 if(data[i] == 0)
  353.                                 {
  354.                                         data.pop_back();
  355.                                 }
  356.                                 else
  357.                                 {
  358.                                         break;
  359.                                 }
  360.                         }
  361.                         if(data.size() == 1 && data[0] == 0)//-1 ++
  362.                         {
  363.                                 sign=false;
  364.                         }
  365.                 }
  366.                 else
  367.                 {//+
  368.                         int i=0;
  369.                         data[0]++;
  370.                         while(data[i]>>MAXBIT)
  371.                         {
  372.                                 data[i++] &= MAXCELL;
  373.                                 if(data.size() == i)
  374.                                 {
  375.                                         data.push_back(0);
  376.                                 }
  377.                                 data[i]++;
  378.                         }
  379.                 }
  380.         }
  381.        
  382.         const LargeInteger& operator--()
  383.         {
  384.                 if(sign)
  385.                 {//-
  386.                         int i=0;
  387.                         data[0]++;
  388.                         while(data[i]>>MAXBIT)
  389.                         {
  390.                                 data[i++] &= MAXCELL;
  391.                                 if(data.size() == i)
  392.                                 {
  393.                                         data.push_back(0);
  394.                                 }
  395.                                 data[i]++;
  396.                         }
  397.                 }
  398.                 else
  399.                 {//+
  400.                         int i=0;
  401.                         data[0]--;
  402.                         while(data[i]<0)//不出现0--
  403.                         {
  404.                                 data[i++] += MAXCELL;
  405.                                 data[i]--;
  406.                         }
  407.                         //除去多余0
  408.                         for(i=data.size()-1;i>0;i--)
  409.                         {
  410.                                 if(data[i] == 0)
  411.                                 {
  412.                                         data.pop_back();
  413.                                 }
  414.                                 else
  415.                                 {
  416.                                         break;
  417.                                 }
  418.                         }
  419.                         if(data.size() == 1 && data[0] == 0)
  420.                         {
  421.                                 sign=false;
  422.                         }
  423.                 }
  424.         }

  425.         const LargeInteger& operator*=(short val)
  426.         {
  427.                 int c=0;
  428.                 if(val<0)
  429.                 {
  430.                         val=-val;
  431.                         sign=!sign;
  432.                 }
  433.                 for(int i=0;i<data.size();i++)
  434.                 {
  435.                         data[i]=data[i]*val+c;
  436.                         c=0;
  437.                         if(data[i]>>MAXBIT)
  438.                         {
  439.                                 c=data[i]>>MAXBIT;
  440.                                 data[i] &= MAXCELL;
  441.                         }
  442.                 }
  443.                 if(c)
  444.                 {
  445.                         data.push_back(c);
  446.                 }
  447.                 return *this;
  448.         }

  449.         const LargeInteger& operator*=(const LargeInteger& val)
  450.         {
  451.                 if(sign == val.sign)
  452.                         sign=false;
  453.                 else
  454.                         sign=true;
  455.                 data.resize(data.size()+val.data.size());
  456.                

  457.                 return *this;
  458.         }

  459.         const LargeInteger& operator/=(short val)
  460.         {

  461.                 return *this;
  462.         }

  463.         const LargeInteger& operator/=(const LargeInteger& val)
  464.         {

  465.                 return *this;
  466.         }

  467.         const LargeInteger& operator%=(short val)
  468.         {

  469.                 return *this;
  470.         }

  471.         const LargeInteger& operator%=(const LargeInteger& val)
  472.         {

  473.                 return *this;
  474.         }

  475.         friend ostream& operator<<(ostream& outs,const LargeInteger& val);
  476. };

  477. ostream& operator<<(ostream& outs,LargeInteger& val)
  478. {//HEX:K(n+1) K(n) ... K(0)        -> DEC:sum[i+1]=sum[i]*65536+k(n-i)
  479.         if(val.sign)
  480.                 outs<<'-';

  481.         int len=val.data.size();
  482.         vector<int> dec;
  483.         int i;
  484.         dec.push_back(val.data[len-1]);
  485.         if(dec[0] >= MAXDEC)
  486.         {
  487.                 dec.push_back(dec[0]/MAXDEC);
  488.                 dec[0] %= MAXDEC;
  489.         }
  490.         for(i=len-2;i>=0;i--)
  491.         {
  492.                 int c=0,j;
  493.                 for(j=0;j<dec.size();j++)
  494.                 {
  495.                         dec[j] = dec[j]*FACTOR+c;
  496.                         c=0;
  497.                         if(dec[j] >= MAXDEC)
  498.                         {
  499.                                 c=dec[j]/MAXDEC;
  500.                                 dec[j] %= MAXDEC;
  501.                         }
  502.                 }
  503.                 if(c)
  504.                 {
  505.                         dec.push_back(c);
  506.                 }
  507.                 c=0;
  508.                 dec[0] += val.data[i];
  509.                 for(j=0;j<dec.size();j++)
  510.                 {
  511.                         dec[j] += c;
  512.                         c=0;
  513.                         if(dec[j] >= MAXDEC)
  514.                         {
  515.                                 c=dec[j]/MAXDEC;
  516.                                 dec[j] %= MAXDEC;
  517.                         }
  518.                 }
  519.                 if(c)
  520.                 {
  521.                         dec.push_back(c);
  522.                 }
  523.         }

  524.         int lend=dec.size();
  525.         outs<<dec[lend-1];
  526.         for(i=lend-2;i>=0;i--)
  527.         {
  528.                 outs.fill('0');
  529.                 outs.width(4);
  530.                 outs<<dec[i];
  531.         }       

  532.         return outs;
  533. }

  534. void main()
  535. {
  536.         ofstream out("result.txt");

  537.         LargeInteger li=1;
  538.         time_t begin=time(NULL);
  539.         int num=65535;
  540.         for(int i=1;i<=num;i++)
  541.         {
  542.                 li *= i;       
  543.         }
  544.         out<<"fact "<<num<<"="<<li<<endl;
  545.         cout<<"time:"<<time(NULL)-begin<<endl;
  546.         getchar();
  547. }
复制代码


65535! 计算结果:耗时<1s
fact 10000=28462596809170545189064132121198688901480514017027992307941799942744113400037644437729907867577847758158840621423175288300423399401535187390524211613827161748198241998275924182892597878981242531205946599625986706560161572036032397926328736717055741975962099479720346153698119897092611277500484198845410475544642442136573303076703628825803548967461117097369578603670191071512730587281041158640561281165385325968425825995584688146430425589836649317059251717204276597407446133400054194052462303436869154059404066227828248371512038322178644627183822923899638992827221879702459387693803094627332292570555459690027875282242544348021127559019169425429028916907219097083690539873747452483372899521802363282741217040268086769210451555840567172555372015852132829034279989818449313610640381489304499621599999359670892980190336998484404665419236258424947163178961192041233108268651071354516845540936033009607210346944377982349430780626069422302681885227592057029230843126188497606560742586279448827155956831533440534425446648416894580425709461673613187605234982286326452921529423479870603344290737158688499178932580691483168854251956006172372636323974420786924642956012306288720122652952964091508301336630982733806353972901506581822574295475894399765113865541208125788683704239208764484761569001264889271590706306409661628038784044485191643790807186112370622133415415065991843875961023926713276546986163657706626438638029848051952769536195259240930908614471907390768585755934786981720734372093104825475628567777694081564074962275254993384112809289637516990219870492405617531786346939798024619737079041868329931016554150742308393176878366923694849025999607729684293977427536263119825416681531891763234839190821000147178932184227805135181734921901146246875769835373441456013122615221391178759688367364087207937002992038279198038702372078039140312368997608152840306051116709484722224870389199993442071395836983063962232079115624044250808919914319837120445598344047556759489212101498152454543594285414390843564419984224855478532163624030098442855331829253154206551237079705816393460296247697010388742206441536626733715428700789122749340684336442889847100840641600093623935261248037975293343928764398316390312776450722479267851700826669598389526150759007349215197592659192708873202594066382118801988854748266048342256457705743973122259700671936061763513579529821794290797705327283267501488024443528681645026165662837546519006171873442260438919298506071515390031106684727360135816706437861756757439184376479658136100599638689552334648781746143243573224864326798481981458432703035895508420534788493364582482592033288089025782388233265770205248970937047210214248413342465268206806732314214483854074182139621846870108359582946965235632764870475718351616879235068366271743711915723361143070121120767608697851559721846485985918643641716850899625516820910793570231118518174775010804622585521314764897490660752877082897667514951009682329689732000622392888056658036140311285465929084078033974900664953205873164948093883816198658850827382468034897864757116679890423568018303504133875731972630897909435710687797301633918087868474943633533893373586906405848417828065196275826434429258058422212947649402948622670761832988229004072390403733168207417413251656688443079339447019208905620788387585342512820957359307018197708340163817638278562539516825426644614941044711579533262372815468794080423718587423026200264221822694188626212107297776657401018376182280136857586442185863011539843712299107010094061929413223202773193959467006713695377097897778118288242442920864816134179562017471831609687661043140497958198236445807368209404022211181530051433387076607063149616107771117448059552764348333385744040212757031851527298377435921878558552795591028664457917362007221858143309977294778923720717942857756271300923982397921957581197264742642878266682353915687857271620146192244266266708400765665625807109474398740110772811669918806268726626565583345665007890309050656074633078027158530817691223772813510584527326591626219647620571434880215630815259005343721141000303039242866457207328473481712034168186328968865048287367933398443971236735084527340196309427697652684170174990756947982757825835229994315633322107439131550124459005324702680312912392297979030417587823398622373535054642646913502503951009239286585108682088070662734733200354995720397086488066040929854607006339409885836349865466136727880748764700702458790118046518296111277090609016152022111461543158317669957060974618085359390400067892878548827850938637353703904049412684618991272871562655001270833039950257879931705431882752659225814948950746639976007316927310831735883056612614782997663188070063044632429112260691931278881566221591523270457695867512821990938942686601963904489718918597472925310322480210543841044325828472830584297804162405108110326914001900568784396341502696521048920272140232160234898588827371428695339681755106287470907473718188014223487248498558198439094651708364368994306189650243288353279667190184527620551085707626204244509623323204744707831190434499351442625501701771017379551124746159471731862701565571266295855125077711738338208419705893367323724453280456537178514960308802580284067847809414641838659226652806867978843250660537943046250287105104929347267471267499892634627358167146935060495110340755404658170393481046758485625967767959768299409334026387269378365320912287718077451152622642548771835461108886360843272806227776643097283879056728618036048633464893371439415250259459652501520959536157977135595794965729775650902694428088479761276664847003619648906043761934694270444070215317943583831051404915462608728486678750541674146731648999356381312866931427616863537305634586626957894568275065810235950814888778955073939365341937365700848318504475682215444067599203138077073539978036339267334549549296668759922530893898086430606532961793164029612492673080638031873912596151131890359351266480818568366770286537742390746582390910955517179770580797789289752490230737801753142680363914244720257728891784950078117889336629750436804214668197824272980697579391742229456683185815676816288797870624531246651727622758295493421483658868919299587402095696000243560305289829866386892076992834030549710266514322306125231915131843876903823706205399206933943716880466429711476743564486375026847698148853105354063328845062012173302630676481322931561043551941761050712449024873277273112091945865137493190965162497691657553812198566432207978666300398938660238607357858114394715872800893374165033792965832618436073133327526023605115524227228447251463863269369763762510196714380125691227784428426999440829152215904694437282498658085205186576292992775508833128672638418713277780874446643875352644733562441139447628780974650683952982108174967958836452273344694873793471790710064978236466016680572034297929207446822322848665839522211446859572858403863377278030227591530497865873919513650246274195899088374387331594287372029770620207120213038572175933211162413330422773742416353553587977065309647685886077301432778290328894795818404378858567772932094476778669357537460048142376741194182671636870481056911156215614357516290527351224350080604653668917458196549482608612260750293062761478813268955280736149022525819682815051033318132129659664958159030421238775645990973296728066683849166257949747922905361845563741034791430771561168650484292490281102992529678735298767829269040788778480262479222750735948405817439086251877946890045942060168605142772244486272469911146200149880662723538837809380628544384763053235070132028029488392008132135446450056134987017834271106158177289819290656498688081045562233703067254251277277330283498433595772575956224703707793387146593033088629699440318332665797514676502717346298883777397848218700718026741265997158728035440478432478674907127921672898523588486943546692255101337606377915164597254257116968477339951158998349081888281263984400505546210066988792614558214565319696909827253934515760408613476258778165867294410775358824162315779082538054746933540582469717674324523451498483027170396543887737637358191736582454273347490424262946011299881916563713847111849156915054768140411749801454265712394204425441028075806001388198650613759288539038922644322947990286482840099598675963580999112695367601527173086852756572147583507122298296529564917835071750835741362282545055620270969417476799259229774888627411314587676147531456895328093117052696486410187407673296986649236437382565475022816471926815559883196629848307776666840622314315884384910519058281816740764463033300119710293036455866594651869074475250837841987622990415911793682799760654186088721626654886492344391030923256910633775969739051781122764668486791736049404393703339351900609387268397299246478483727274770977466693599784857120156789000241947269220974984127323147401549980920381459821416481176357147801554231599667838534854486406936410556913531335231184053581348940938191821898694825383960989942822027599339635206217705343572073396250574216769465101608495601439303244304271576099527308684609204422226103154229984444802110098161333824827375218998738205315164927134498105950159974800571591912202154487748750103473246190633941303030892399411985006225902184164409988173214324422108554248620896250260604398180189026317781146617454999771440665232863846363847001655618153861098188111181734191305505024860345856755585637511729774299329074944236579668332700918367338977347901759248885660379952771540569083017311723894140326159612292912225191095948743805673381278538616491842786938417556898047100859868372033615175158097022566275200160956192229925401759878522038545913771783976389811198485803291048751666921195104514896677761598249468727420663437593207852618922687285527671324883267794152912839165407968344190239094803676688707838011367042753971396201424784935196735301444404037823526674437556740883025225745273806209980451233188102729012042997989005423126217968135237758041162511459175993279134176507292826762236897291960528289675223521425234217247841869317397460411877634604625637135309801590617736758715336803958559054827361876112151384673432884325090045645358186681905108731791346215730339540580987172013844377099279532797675531099381365840403556795731894141976511436325526270639743146526348120032720096755667701926242585057770617893798231096986788448546659527327061670308918277206432551919393673591346037757083193180845929565158875244597601729455720505595085929175506510115665075521635142318153548176884196032085050871496270494017684183980582594038182593986461260275954247433376226256287153916069025098985070798660621732200163593938611475394561406635675718526617031471453516753007499213865207768523824884600623735896608054951652406480547295869918694358811197833680141488078321213457152360124065922208508912956907835370576734671667863780908811283450395784812212101117250718383359083886187574661201317298217131072944737656265172310694884425498369514147383892477742320940207831200807235326288053906266018186050424938788677872495503255424284226596271050692646071767467502337805671893450110737377034119346113374033865364675136733661394731550211457104671161445253324850197901083431641989998414045044901130163759520675715567509485243580269104077637210998671624254795385312852889930956570729218673523216666097874989635362610529821472569482799996220825775840988458484250391189447608729685184983976367918242266571167166580157914500811657192200233759765317495922397884982814705506190689275625210462185661305800255607974609726715033327032310025274640428755556546883765838802543227403507431684278620637697054791726484378174446361520570933228587284315690756255569305558818822603590006739339952504379887470935079276181116276309771257983975996526612120317495882059435754883862282508401408885720583992400971219212548074097752974278775912566026443482713647231849125180866278708626116699989634812405803684794587364820124653663228889011636572270887757736152003450102268890189101673572058661410011723664762657835396364297819011647056170279631922332294228739309233330748258937626198997596530084135383241125899639629445129082802023225498936627506499530838925632246794695960669046906686292645006219740121782899872979704859021775060092893328957272392019589994471945147360850770400725717439318148461909406269545285030526341000565022226152309364882887122046454267700577148994335147162504252365173710266068647253458120186683273953682547456536553597546685788700056988360286686450740256993087483441094086086303707908295240576731684941855810482475304758923392801571302824106234999945932390521409856559565661346003396150515164758852742214732517999548977992849522746029855666700811871200856155016457400484170210303038996339253337466556817824410737409336919294104632307731994759826307383499600770372410446285414648704116273895649834555162165685114551383822047005483996671706246467566101291382048909121117229386244253158913066987462045587244806052829378148302622164542280421757760762365459828223070815503469404938317755053305094698999476119419231280721807216964378433313606760676965187138394338772485493689061845700572043696666465080734495814495966306246698679832872586300064215220210171813917325275173672262621454945468506006334692713838311715849753092643252486960220059099802663765386225463265168414963306369548086551101256757717890616694758344043486218485369591602172030456183497524162039926441331651884768606830642004858557924473340290142588876403712518642229016333691585063273727199596362912783344786218887871009533753551054688980236378263714926913289564339440899470121452134572117715657591451734895195016800621353927175419843876163543479806920886666227099512371706241924914282576453125769939735341673046864585181979668232015693792684926999983992413571941496882273704022820805171808003400480615261792013978945186295290558440703738300533552421153903385185829366779190610116306233673144419202893857201855569596330833615450290424822309297087124788002017383072060482680156675397593789931793515799958929562156307338416294599900276730832827716595064217966523190439250543226753731811755315476780739470338931185107297724318378972674957455778183345495942317353558291046967315391275975687281861691161083156337232639968881490543943261197182274996791176628553401860198315809629981791107208804992292016062059067271273599461871634945774995805337947187105456452579396024210259136415528398395201773012712514892051061708228008339985665786646920737114269682301770416324829479409558694699089379165191006305185352102345189798127619143061864362703081977124992751056732909481202057747100687703379708934229207183903744167503493818836342229284946790660285674293251642569044363473087656797056595677285291081242733154406580199802711579126254172797452862574865921933293805915239524735518887119860391319654287576290190503964083560246277534314409155642181729459941596061979622633242715863425977947348682074802021538734729707999753332987785531053820162169791880380753006334350766147737135939362651905222242528141084747045295688647757913502160922040348449149950778743107189655725492651282693489515795075486172341394610365176616750329948642244039659511882264981315925080185126386635308622223491094629059317829408195640484702456538305432056506924422671863255307640761872086780391711356363501269525091291020496042823232628996502758951052844368177415730941874894428065427561430975828127698124936993313028946670560414084308942231140912722238148470364341019630413630736771060038159590829746410114421358321042574358350220737173219745089035573187350445827238770728271406162997919629357224104477155051652535867544109395079218369015261138440382680054150924346511711436477899444553993653667727589565713987505542990824585609510036934663100673714708029927656933435500927189854050109917474979991554392031908961967615444686048175400695689471463928245383807010444181045506171305160584355817521032338465829201071030061124283407458607006060194830551364867021020364708470807422704371893706965688795617928713045224516842027402021966415605280335061293558739079393524404092584248380607177444609964035221891022961909032569042381374492494906892314330884224399631396391545854065286326468807581148748371408284176455226386313520264894016262494802388568231599102952620337126449279901938211134518446387544516391239377974190576649911764237637722282802318465738050121277809680315691477264910257503508758792248110223544524410872448565700755187132146592093548504552829170749596775404450779494836371756062326925757412813110241910373338080434325310884694831555729402265394972913817581338619457057799561808755951413644907613109617155928376585840036489374076822257523935988731081689667688287403837192827690431514106997678303819085690713091931340846019511147482766350724676534922040058626677632935516631939622498979912708004465982264899125226813124300528104995058595676527123591494442612554437618645029202881358582871789577224116380815161831603129728796987480139828621645629196153096358337313619724773332353025466571196902611237380629030242904275794549030022660847446513161741691916851746464945459696005330885252792083472495235473110674109099223541055506299687642153951249355986311346661725116890785633328935569150449485189113488301876365100638502565916433021928565596263914382895068324838727165616560111531517055222955765944972454788815532316417453267167978861141165355597588331979638070962998880767303616940317736448140427867784251232449974693421348217179595190698204602997172001174857303889719205597414742453011135869766256607770970225633261701108463784795555258504578058879440756064974127974530918418405207558526462208821483646754652237609210787539190454684852349759986044943322828073120679922402477507514105890774627334319091255451352225329275913842047384603056163154236552935312278389759446515787337343463172280001031380425481404022090580405056003860937403435068863081434683848900708938565050027569059678069404698435184535134141031615133683043714786642925389717165978629010728400758939700388317742648163725113277369926827709465342583596111881955092462062153978121197244762623771534452048069819082524943963962251113831177428978535825590832490480497516047104257569753442551515779815600370847230603484753977513688390404316017486248871339311818523029425425676202485688393970836748788453789172574145155917919035398535077200900594979352939459631213445503368260690059828717723533375221941915547303742062343262892968397015058892191112049249864792053410872349115430987182160055762209075732304626106597744947658346313025598636315029959672352476943975462530206788193304372284800209305354155640664838569378144603138697563459200233462606995955513484754147891180830329816421587452922952678937925647752029052675349356673744293182673374571642465407748267901046778759085408130531447176455869894169668940436489952465247443988349583871206296485413357553813419500498743813369062703973874586604296871595820715766599826607317005624465541763024501349159567288942619746144496908671655859782729228702723774835097362901019130417812735773037781804081589136005207315806941034305003184349342360269244733060013861119781774472669608928321052543116496033420102032603863672532889648333405862204843616575362001468405476649666473566979572953394809138263703324220930839366954980688240491622063147911494642042500022450413425558561937442905257252436320054487441524307305215070491020434076572476865095751174125413729531644521765577235348601821566833352520532830000108344008762266843817023235605645158256954177359197813649975559601912567744942717986360045847405209290089397315276024304951653864431388147876977541478757432610159879709758855625806766197973098472460769484821127948427976536607055051639104415022554420329721292033009353356687294595912327965886376486894188433640548494009574965791657687213927330153555097865114767947399690623184878377515462613823651665956337209345708208301840482797005728071432925727577436229587047361641609731817241594204270366066404089740245521530725227388637241859646455223673260411164598464020010216920823315155388821071527191267876531795071908204525100447821291318544054814494151867114207103693891129125012750853466337717749376016543454696390042711129829255096830420665725364279472200020835313883708781649957189717629338794854271276882652003766325924561614868744897471519366219275665852462114457407010675380427564184440834805203838265052601698584060084788422421887856927897751810442805474427229455167420335686460609977973124950433321425205053675790499520783597650415379001132579536040655172654879022173595444151139429231648950663177813039057462082449171921311864129633704661406456900178942356738775523130952785912774533241855442484484493664210731348819180640189222317302156645813473186449997905781662091469870718039388885781280740226363602294114354869871402143572055947730892808653678920201935102605361567924483276749476117858316071865710310842200560259545115191391309119544447844361032741876102338843391687589233423790859841968266525610628751237572318491474951945985728897934981791761822652480408237128109790772638864286067917082288575852703470839714561619926247844794692794996845945632382702297364173503430783194115698247820013290851202878474805860188960045901745974055630732714487679085288867978809970695240681006625611440014983413580889737246844064948857074167687916413224205373654067330186392497910915474785959163865597507090581175924899502214799250945635582514315814464060134283490422798357939659258985200763845646681640732681928346007767285876284900068874564639274964415904034033672337814491597032941787294155061054129515400159393851663929325677429557549480046658273579653990940233543644649376827272541873627547532976808190325336141086433084237771738995221536763095302045902438694632702895293994483013577589081214884558493819874505920914067209522469096263076941753340983698859363700314973728977996360018626500174929290087931189997822963712306642297996163582572600112288983647651418045975770042120833949364659647336464289044499325396227091907373705772051322815957863227591912786054297862953188615559804728160710864132803585400160055575686855791785977899197902656592621283007225351401525973569300729015392211116868504740402172174442051738000251361000494534119324331668344243125963098812396962202358858395587831685194833126653577353244379935683215269177042249034574534858913812582681366908929476809052635560638119661306063936938411817713545929884317232912236262458868394202889981693561169865429884776513118227662526739978808816010470651542335015671353744817086234314662531190291040152262927104099285072418843329007277794754111637552176563589316326636049381218401837512818884771168975479483767664084842753623074019542183217985496260666590347925816342392670947839907062923166535037285019751324813803837070894638925470887039085723581006130628646664710006104352115778926613432214655311411882596942926284522109026688414975763341554921135581254616558078273470115814006008345762133130389987843270653719956709570847385786092649188858378739239165554263577301292243641604062551736892335636568854365851646207821875741724364525814143487632761341752707376754922276287782264765154315341585713773522730335403376364204258034257264749686217823666951353410677378421131371131987373222891805275062812277716412494412401207125954319991746574745892582613712825555535080404143944557295994554635608487251339462936358940832098964801619583130429720964794128539388996265368928263807677168759588502216464582430940165009688797366157733560316836710386895228270941509545222744002735499253670214715994056544813842186380128799900820933576320736369405991424263718294000613741900579513096298545330748197802568301089672873802234820488862973130369689882640657904781562389778485365025691064231795736025330908763271784911189748432246868086340383964176127605788646574472284824932687443062551220506955168464669477183681911432873544815836350548146411099960143390595799766290646881295025039150923633011076070632863317393378149693380247580035052789782755750928604039420506342939327064636161031822879248152679306862749237275631852225654266008556849497720285909150930495425967473648331437236349555448901598668408362176913559656039519670425368863482369587129462524759031776813184977588276576740482558136502103649585505703259219957675334264223783723586058509403583977103476670644788640831109650302565215607464019652716999732373465237173456595514559493098166644006211599349133180135150528651842178828026343325934755850761168697709125580056185683710540856081249519403148064618719402577663285267019698387567561524696759028106864896869293315954352097687527137201616160931174250199709289684940034696242325688410665113304377412256176258658941236728171145526423894512631717834790276921171452887352955019336759218908006048633737786728180610254782570436788449503518925787499836694785908612975543084122677060954347612133717433156783790162012337237023338316414706428592185977610158232721997915062871868186750981665537745013020880333904353639770263363809098526494532628146558065546504823486429495390613257400496912888340518222933644476683855037967975809619983575807027759535968788226194659612223044549275600274955168583542582295336042834426318478068825395450746691877897765406038432512843812811316856204608617289408229658626174420766920297427930088129519854678713548623236610413216581279267151545961594352593456757445992307889205519540082316409719591250025455237503106735639748835542480449681383030671851931491335789202123605308199952020584503423499932150962634977812456658304680581824563524814625849331926195406884818446445248429486063016169476663242625231476322371109695369483824482316410396224507675405614287468267835723704895606990652792688455844512046654853378534026646645042339638488257719874953611300494215593735545211926186721478265416885604094928290056616883807637656690510740892510549165222968878676968631652514917701499900066637344546120262780701925698706225540928945194718778004306130021828287425867048748480826948573444778244078734102710824870269523830804910960482013901294024631244800159336670212658317677879752965963472576894326540435889267293950687860830626266263287392087327302547910099932113388977807814336728791448768373686467748528777737403547472871644217767820712964506270880978637928144071192505141148004907055608097229299792441471062852247029870699869227676341773513258602908903875707454368077876422385333700692089616351009233587303986543906071880952557553380364725895007306772122528078179471056481171378557451057691044322925429024149433588396093679321361696954251299731031032804436954501929843820842383121265825740594509426942777307124802176915781835720087170538773256017987133005505911377823841791640280841409623820847637393013930778428554545222367559824666250608754284876104145661362227642405914304455580856318180935230407793891614902116292400515074914068443203230365609954878620999194306564455332547135557365318516011700321550690787716752062881527885897149410320986984083048966524351030502444679931779147659103428949129054120361601695671222140806369405940304552186212879933092856231022418446365289097444640151986623183881962444822590783585914043686193019041458962693878907034982169868696934448086213990534591792826654304798207219634134755646525483143771156678459077797196510772468000293581546267646310224279007313631352522067062951125935874473134186492497282784796644585448962932905262058065248588707020879389134476083344653170939242408249328008915731319541348311820927752486880548733943315867562666122179355051190609992911379445634995627391898459029021713155706096267881673302940198464237390445098028030948975981259252055850973537436556825780313681902007151675693827281818824587541710721180806556448039122504537089422695358382192535075692834095639859265599740391316709290043996275976830375217503360879028295673068862263077729733533853682668734519035709709687322323738300494090123239274318759046526327095178406267264828893646896593219169521106361729757074376148061601331104911692271318609404145014842866423634716982892418180484365230538864559809839273836490685480823014267803143937440431807822678779494006206489151248952516543005634448375046751754207043313372486870633237561645232360481932024377596890914783372179553676992603235715185513391098402739063753280702313301755754269396202629423910945323537910125948964941812563672992967084250667599803456273455598559628512281414582556024841783305645240508450065988755987518601335860624932784487772006842296591945516539562982960591610046578907214842054861830418175604559815168088031783080261445994444677918012432146400983610678683412974872596729258786806223080115822026289014364459002301645823666709265571264559925790622304745235625575111770791512002789380975775468546121017307522799241407026308137792971909461413145802081087738121624539858769697371425881836152605069380926917712087321915005831977113322793572385071940612761291872572099404930250277748156614021327434743881966413330052634229082906400927944924808556131183440161804801357032507836323938921567643159620442612809700944107776130638909071294456394056601559246025454204771186140420155233371270501377121034570009578009389265329385720478576508777149663403003562380595757191609382171312222810465858388943507176431939973012661591423837170284400120399485880996231859472474858776584355077006934099220340378772192728370301380838144394114984971730766162961342059105014814283949700695951676939041557902856356911055547312684571497449635320554677940775184056667637222969090346128706829887104278761090090999160443821794511763620835379716161833124364431267855435550800507986124664397724135502128238026726719914989727248512981287283697489276420792868666970177259794407858155909332508554131299946581118527691652464790819119384233275897699573012098103009171001695718791616942270079528915191912521053891838538959315167400505723817401030621004380243011187977704252328073236575129609372456053680037516596164236147709330391224409752871732067976128120428026739256557305675931512645750047875756531854825821411574030473147492511910835615765732002546109686701890307648531373832912682481741181359032826625082549313211431478953352317043989053928534946642886074268371824902498092479487226633686823799580875637040808655649321905489637785549531167397935270799470452399153297534358690514105864096534514182896474439367182852711843560799285895978176543950113088848419163516673213692860830956744502801800373716458009168082972708715609185038654053436660045504985624687376022557041595800250174095361839287643458003670864954057941720085136357127163768323493134230703821274484501440529541695374381945459456533165140990993722722801019654652726227831512103467686166826131471843610025517863247950150022953695466317739589344131481485834694374523981159954666071205997794363440185078360899108948073419633939259318973940943110042116729120199722626609871927014024105805515315100109804996044147291039451030312664114726736839973315035036742741546992633165270432940675237449075056739508929674779115800864399992564817208847429250821546279856079127768611946086210349405535850134472190244543824521089284409498132717010673966471114931896789977661595488186193176900175027901783824624387873831483279500879026433992577026588005849778984624295660321276945810824348129690840972550671054732471317254997191901039553305847040728081693158626093886019147689944137673621432083607375131574376316754666479186753896571555100850626810005119827486807780592667765654100834778571024250133253391587384761024129794736751001163498977803745930025457609870671092153597115178252014281216647543034075128600240297038428615984289816602143429849088917359682192284469123035904329877231843309914187264674607558318725713138832356015809009594182530207799397648462597901883341793830920965841463574411985878296475850943053008148341821747826603773762252997703468752903517310792083220038080809212164346586817989810504274375385786789186350517717501606531826406928883250135919517178537687865881752366421534010961295763074762648070312757365787762352859057153932484576503944390496668087711899192498933896524852395536795827530614167131757915756386606004839994179548705868209201195154952031294562451315422506574858629161606523796643010172693950282294667489681746821163996794950294284013099235901278250437428192557634533217576162292751110598368271567229778620053722932314082887058749444060116236521627717558503013451471452765841864277071769968435499620257547431811994883385806759692359580622165832464092095350648357935817742903018315351290014321495518177456908388719320697769695657771754499149911431368950836160692539606469893374870942933219185601299108564470256257163505508620689240297589684714283678684735455533583477652536156578189996983068654671736445996343136468195427420490472433064675001442697508322369013083895492637066778406531328664886080129513771720847581157719491012345141774941482773580041432667332379617716965698582785832300505265883502247868050648201444570593197343382923860072601696510903258980909912837652275381493529845099414966933862815568031306981064525192703818515872648691762563239441425216118427769145067718411735714396681005615483952443154944864238384298900399826113322468963346522104692545137969276009719645338955332105584245640187448611050959111766828942711640054010503770420346052521318228045892998637903572350665108782350043349942391285236308896510989246641056331584171142885304143772286629832318970869030400301325951476774237516158840915838059151673504519131178193943428482922272304061422582078027829148070426761629302539228321084917759984200595105312164731818409493139800444072847325902609169730998153853939031280878823902948001579008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

20000!  耗时:2s
fact 20000=1819206320230345134827641756866458766071609901478752648918062218634569461038557534453836095827758724739177502384189912041671245383926576865723475464524930275709204625357875789525900491823414542718036070392521085047283383729296861580052404638841199526622379791066223341463393474395925629787482113163418647665455586660436184087223951946276615548561632208981651545091872218436294406051877306392783358445931186417148398260080400146928105895643738692767105374763186090336511780868599512519843617384918221869858019078196339128759665295841157777813491489409939230578103105905988720691493952696699343574983659137962578903705716902337854828253406978492916531166704020223408974723378025728021785188391510797310297013143732956206337141728256129448819212285111707757412048942243223685263626707514121305282315820321283299281396342128857577713702823248976788453610611086876406235690279656009538364835651790933084337403846779999492765339631654736288935199660225186364164501830300710635452054198301551129698382228651679052521947578326174498818999103078230900998230255192521668153855237082223393396256518927523897560451367991707122492644125621656977754935015185136223424536236082049708267282209694029115324122700295906687521246304592598016350798150157118643939826662111851567075749760180575150378322257651547386370349935021174326742470282351069392212973957360132570647293569359766996208379937673704269535226075880983640605703266078224982138479572920849716512893209445040690064801276425917752458927101033924446315450771486685532642303913788919310844577084283964175498228765263621608440412853633906910171930463610385645820744909239703240366376240637621838055888668116641394549104308779104564432699648946388702235680707365441002347274462483335180196181280724089960671217804504348683038846159078256259880584813344270221148603590042452309662537212614046244138953519229573869893074525383446893912315063797938571499477769107817419304469554712634747306148472385039297629612717548806551563829550630930946675684401814618441321646683269427721993158279615035881182670318979008283335789144271032083423544703635466138794697651350314402685288508420397019834284422305272278969418263077061533996322663729398803682706995509520217322001025554892495358317996848086340064596083569840851277518587523966062477539941480837360544238167856816863891124880147978903148708881439895001073586452888924224570307962298699959732760545361441853376861865311472943334632700497459546524530674227010913885146992911476511469328116322844277291429242580226789688280447607592763850985911959762352034962843633682628761799072096874350710765501344796950186605278475260199773684637260318219984313964504098197236766254561576963352225113113860686582041968943358438445817147699481383223388403108694275803764969856335026035998141763771955021534739448155221081816843367878112690394417684364934554237024383467932868994288070739501959598859489422664768319867794244200146319821081274095297964073583557774908763829967444472509287511266025989760063372754036414647780905929771518145840711438775868344972951118873043755134229014440942305929794132943247059183655383860957005976931552955009910617146270900308131292961987706628737539292294513164726272782261649467434486469164184438193102743685176271303080345578147577244822679153608466185148549403170961726229949693155419870367496622944764818038547513177344308839281179313697155652585056983870954326955150272519431702859141648709273119898627462220512226122429308587858249872807205877995641040609646207689348811486627927797149208946180865427363397867065322679887603422518891527755773857337546824775880433525219896277405006722197251134708090440207476590657537722377855025749581125718480792279949990827699398031516660523819630141728849936307718563001020925185801549447529442386753823216643573095907613055140378684121732460851105776453171910915179146879088014743892901557531200026943010780316277121008043268677823177040792493695317178975986609446642073278632102387785193987468472023053569759865392650586235399377255429013141572538378477860078167724394075772574884198675569155221364304721221050265975303104224165477579039179173571096121008398270145669162626875616473358695080183346883622204141103292978624716922383737357829571225194683967490073341622886685418101459192339544211735840172983757718064889007150719331720466640794043048090974943968803649059474968696631935068157436827860838210546123803921506308623361485630469301945487629899739863616549219334994650673550401330151345075665824799994090331936161424877736905043478277717763961497418976202234057616643395598594859473644564953985771620620875545811197801332399244406489063667172132950923874823469967017152578700547993819001041019927889934645252696959839498892202157013705439003350869012841853660334910263512681071257967010460722000465012359520949867280788523637538360908419328210010257605009232300314209577481960992245202867834086028794952868894583400329819783860250441186417541301552881660008680164170950654872791036638446267146773864094451526966332781250141076583444686499433878558018508160604659864075870776909871021229329263538739876718139370016325847398153054561048484763662082654256001200191082613314126038405677762180256725913236219133377507849413721136794741341001534448183309998018715217297881192841912343748670416058241007870678829528482082691122121330712603685821451480221716895318913916202070682419066983900093073086105685322752234759208892423037447915366738976625544089991660964802472361299583287556901526925348721489285931471753590624435823333022537333267963484434134541673989275291046046424782456020187061958717359710213138644204255929484953264789836125656588739758462829812398837202656287595313781131879979400748699779848035035756812980550952397267497904091524828453555589761023887780032139231088497638208764454554433739653605128277824759693719131098124401555934839785787355191033260265943249095282688827636768908819228932665848253354873717500605878412941188537735312514532963900011840221152263049331990362877166364653037991595352861605659774721503482980027689759326229113848950704934520858446425457193454912145363731266721830424433307742075634652721403711162820396238086355160999355618297521289683553771098957696054216889231326934398910226399241785513310860392057647431701947586236354120816584713491942420949564507182024228072027781730507302930117288326738834923052062426377507852420063728820824909125128152264056399383638182576043502233606516831151065668154643896157732561699801416334125007894034611132445538783921186310538638056879951957370230679730454657229846699230040375609587961440796961286950959860365880249622780705715936042983947277962221961292142180211474695218886969112740759327095542805933340674367023630714819186724092174244157929754525159284243966971843642845783953262449989577763155532711768957317631155798292758081115385574493755074486806292167778180758892355433772883494432652681241638095932653545969272292715884721877223094012622290594450583370628695901332937631867986526065616821140496431535144699403370426021757606829546778216452799702542055038988543839005070435529991812858331677744861985963978407500500276635454918291912895782573218669479896619185731053284124083386551756322564558935262035749574917467544014169279363254641891612321062839763730439048454337953490603090034012435782274912013076332269011719025585995708049245709585180161207568839191808590558566008812626393997961967970510567941594854303996306388652876357534633743491184872355865536759120818981291459710177206508248010358067786198617593593452966045129459460942912600450461043147853506788047163425673589425978580875454449321824404839840943289606418291749851556631737784089646786571196224798974938343633419890493699580957611482768392333266715544350530071870411992877005603207723033264737115843248831622367211956133949350265577199677377527656613297632470633133312913134193330584870460779466844582653273225601999387218698584109416979943723102519262274473775669366320971340118833232615660604561294263739222991626884502832399151669581880313249913832191633577328475643106623136626949755611211959024334425260500745987773662887056055248910295832298881355080656168511488729515338144490921248091258025659678098849983305587280625208533887511105737196438266956487359916870932656568298200240796819097129279489829759755442028992072247367086960165545726936301033082069952991123770942764449599461467977126904030266360082979720712223984077667259688280232866771642650969326327994141066410580843128955964680932434037255516248049922845632407645359758012564762587467687435039205482953017271428750529494627304690447968276109715459285231847646297767936509038838133060858300366128938076905669562978172275087713108126774903309591384979082410937679284333445425433786461570806152042853851597283129872231039238649572129377314446606754207604684111732941269804621441022445075290528773881602657022005012573065889697166205060666103808528455298773147134332056497659719195904875301288687580612794307690136324715676543438776399909576076118381158077141018434553356803610365131382470643795659893897982233054027973252857735150989715272693398055467556132869821389154666109525585905351088020956588996127847061039732504967831372994441646179862193957923753978900509348581196275158717134574563299329747349488140210883303761302233712298954266177681915059255397499263310084978202005677122285166547650260714062565299545181904583395623332360010662355449285047220339919237929005483300264328852793314965767223217531808882356858547360454428255823007486579046973545368237064879219425113808647514279310279001951226988293288319415039304086811898197145886376201620707458201828995479202132335958393356949043546013627353984735250816971311237391569558996050479527549133414606961762772963996912088095503651518431209221134227466284098948321651447145834498187675351721523458075560493822946667882516554370468398657015577872918831176343472019802549361140343865060014338774854251438332634954449353092030375750442205120262639582866742701026264666374139225995887092349954381526496144480115009338457333258435908351446960696523361477115361684418690751925223339481380070653233654337047142411613189823412567411474931232284888666959519792327777827465717271290261089392950902170243336490802743752465282222557028216111861024868004740918439682785177466490897096908009219316889447161503317288175563730351421229103443322341173108826763696119488041566315788554832086207122329117328890371406399709654272522367439309143152609424723949948269099288079305141429593086868989129247976753478368656712660640830751342388642404253958629721071655851138129114767497254400933310725635243824187406379772750928760247724383222155709558673562500405464009702630000517152254994653113961575478867222127138465425517270855566122965079642563333511102205134571474841429860123073286871253377684688879251074362844869930053559056082334554078359842584995765236108097092799340727187751634569960583565821918163340867776711345506835147629239639876137404834963434258309510041886085841807031376709869649018681347841349948459384004081975340452938356293965206661182295112734254838843059641967847544916154220858602419811035522235178904566874864010473172750902990483064932368865511652129553886898890620745683136967786211786929896087904759494452048542893191779025975483129219877390756875075825219362910073295570139954015558239378711991047218586773942818105659158459747092958594165401401183290846810674185089614036947715670506743269128048656131009367822786743363878482850788103588540763157041693164996494387026172362408510762693867393093237410924043880429735456979341548864194491676320916157781892680672525576012129908366471598304136931095592748218174749063788808160173249573440396142927500082552708582931718917413334408048955602523617434320432634268145906161606642874225531966037502806159529530215480220245634115994787692904956681208552193880840494141718503148852009043970620226367909085378940196079676208968803571453660180186327779030792340279542341804234216002405741380905463966124975047359421490539286788689754457598698618054950348735591644776504332171093623081337803259521220730692024509354395145114616503929413765007708079686628845872724765437882904719472597772102397661435355265433072392597803274392284518550132545220957223358869428156272346664111287834274155493106751427050464939948758534633340294427763997499140583394506000560717303429628668031054174871153211805405160137720264055344632239282228870044101832520133431037002350794039779908241126875877169249588958770297503590201599890509161369032939302397382532507926625592425809464556126123616165546435270086360011888749661204931192358122603454482736529842652292666391787562919612811814353006624419912010845910384398315643033659569502958486237531484817555418929185536066953317116313990514915052597408779915794854712389100976543400101165239929165303578059270647148250563927861098430975674767169078538968943650242044165163251823675281959824057290931375968421595609465322411264821422305095198115563670427577394179259873432875331690917308194347360621836672207551192536402226262291556380963565451694131627947595254281285507374593971164774833813397283663812164126515210568393841451137852100664963803169144952643782258579220615559636777004148325989351178969093451558638402380976845907052983196143805624702962302538887412699893428409186699261553455212459353778320825306450115943907508548678657137042397142024277889007431926192937997501975331176382929871139758333309361505400051062297127185725989396791343191240818627837028177268734825752347634957480901559397024449745919841688515996872216083964921586435123787798459483562450954068745750428578617743225606257514639804830820895821681245214221367591084257892685768860608439928771770732283473700297494002467723168798245295210332139739406042934154993754781155421665168155364253003032633224898244023708116465002754266214424552184231286920764299812721212978764766200038037861537682633562561393952546035626643119459173456032232531000960425539642742601797469821406570542415685233219349925735119706551632761189576095567473191249739472149423469811938749842602911899216940424406090878870447721842153261435770637160371382082860157511645244303970638650956793450867158332461591631124290307205146721218129259858391941081135112869317989071312848205514736442373877976255916782674749967634948824824882170347280333071035822162138768583351953552200167027627154326714484530368330355923262944067725691045533238166478508174650459248879225774766037238711886204121982602079615508494139815707353332770408729330295386481561721228779170619387943441604080362967537807579205972596930839081919271274196329288236262024434362665043200867209345263546478008722342250003673588666588176177214684321542616533169823534734452992073409772455636079761060476744498048152138269281924420003659256641267283190443054731667489504873224322780925162131734345836391445932372005060924173080094554731482826078271184248594070279690645499623997455977409044183182134260244671743857234132600871590081363336203315462425237473691535928330033570277904031684379920710269104410929483277000668333909314832736752121670520388848751224583470367254117829787778024703644550903560468514668787955255636081481239509531589253248507983470681100309899330930037514000193159328273694291054627444922120722748001617619576668541701247274607203011508105822279022581877127607582733156388164183327173142198331685126722744851523626456305255548222884296349830429541694614145897501428056190553116183368862032851438740092671074547673546184015910077970517145646516161321311164765667854487108951168626633939595027074713572982242412704106018342439568090295518079385232402382691722726847387962189965517280110494836033528206797794082530974778154667420366462286483442844705862082964630723953855608905490739260072416885964860042685890177406496971279086288485310673653310832724610584402122246093033699789595993464550287723208502362437653610318119779920960458407774044871535753341340962352482023881175954039428859907929757728987420840616043760880338884487435619604389065854269669049681498335439199068741461838912266379165112378346474755624962043750595393302652623852970674556413876524986514499425214952492674652586334927606281446019274260401753809438329981976395650796310687913019353915741864087399337271986837760981421128133763961802589032087703958208181984664556497251185263005797456266041289034518439235525169659797207215573123048470174691346755378507897053220857755158575865689630534730674765623203017465902116763509226362350460280093294676079004331935298875371048904492108672019545121012450404546740373837682515058991177183240080739066304823786732619326709360309251344796974740105582581195478448434184558902922250401118767771590368108276523547759215128220723303864308963116810576347816938491528166414578163457414655277892161127961229250482312903681738768733415243425153882530779864420039050299028332300768024835209819825789683431158648253466466248757225606485004574213952597084397305572676875531331044371162497268970947709430726314370227194092721559080759336531369809690818566097975307802534321637866264936443060234779812783064817770629587540502973699507141879655715487180700445065551137221919612176156389669980406673422892404603726015430197028620532470738700033337238782393537741994293719735861672508202885427825668684150329217690502541250084881044540216469715594552282374384316548796499049436145649127439059297830810495627525308865581025134236563272900374564058893522678258802347791246095293603343389640688769879231221964634108730184215614500527765054992545447275689697903378235373227459484979192109009764484179966660255116702286263775566709724133520165355768740485754398245209844522327303065286344341206736721888446406831415885857457566206364947101875087189496136353325709121005362829621814464015088700928789402512896076093120731052031633745559568132507109999365394244890584626273684883122439374678014481626886506247250680146086785305576049689505840133163896730233242753388007953644340655888545657208951875354389309943295373069372122576115333224044732363662295436626526554870290042039093568312962506334092212189182890598378239813217568456840376710621158181762085051039903311456788183538262240185254176740867185156269161302858922771331449397842694824271636891784326607250704789414696637603920279126888527253106127495601986812450138989440637137793008158029226802765553495456616536544760367130907439190089660969469895386491183225737400267918428203365933865133874473038788434472088121582376181602112002946144006168832727951064014589051588908821016339956176133065914815650868660362991364811533934601492919575573146803131584170636583435293551154194927484458305516573306550619650239570880039607848724381878270909258758351509345484023610307928153897773075445332426043650814697017701880853533956202199602089777934746627724664841516716462375987542154266823482626847889501485730920880894902852893489248813859893023660175943803927680901655241100975613546193471522608250419498438789689852363483180906129328196123071841755542390739830186524571471540585317491178305182769546017787559646057704107673342817921958009845481049408036526452240155025994178204118980690211351869028032434887217340921312228223091481685973069791214173911186281058372730871899855387413549895030243081503422817649903234007156710963748396138601546836748090183307428433260568966312049323009694116925868380897638684187049470592255713632372932142342798466281149974575488545608408202352010844850593230790832159435238151508531503418360661764048477197890147783079834963995443623237330400655463709530124317582608499707156429625680140850542595315998071943369468016099558354413273531848821507973560322077163954184189166229630116714756847211297580561372804301232032412069354113769278995371530097285276923420000533976440343452694953400356726194078911019690594067274695855943812882048492637314105981126845479762429966755102966359207526786137891410620297672505428439353350120709779976398725093621946844279039998296566199104512609974566277580054805345966083812445589396441245247656634968977321210395979463007743170277237254276680972923902291637824582795394981484215314718992898194612220361076512169312310948739305083114041129715537472490437234784153815913296024584389695977448187738717801344639642667263340252623606195350227112855311256815973139559522389380551080929130433546900372619682432047876779431481587832876633769594654806868694548464318114126905890736484811550211684838221501054635922355068308169187174234482642406509696808753466679360407730173047398616752354976287494990994243508381461224483568658744807103062777250725623547811899194791110427719997341243158110412392044980866879564146898501415108682884328204616480109493785222827477664080952191381146145019383828245725818878064002361755488748791459118703154992350985577792852325350323512267658085723916399755577004032448929586817822689987478612836984325693941574961246484579360120731555477862629550129578129172524957061972135097342561480250022218566695085387472808920892476586666784737497813397664596323378010739889782324797464894335491825232074433194495490486312246462961326246181266537984807263589140351143665467936240944786200899909932630854856064401400361833362475023325968111889823550632106262686311041397455287064842183654903081461194539066453561860368766721554333571360422476729801705649394021888696418357809476539702155039465811728167630161693859646301784401963143475174636863179753330750520439784195945017095734263625180726063703877146649986642241631247376941685834544478706733361390863130246913243187846103414730587979866144873890062226456199941430697335889061492449788345262420354418300161439957638576766814704531247615596423295502265967342426359284008241399931539764999588337201225365827456629543301764056722730567890112546614376618827837618517633060994357776826855568183953734701326447510081401053774424198903581360444378231861184158379625367723007346129840397106470803100786466604561053979300860924812248353475749958057550807447683352146473710381542987435432042320006775470583519249129802759604279397149868608207272354862583213283814942513354405372210014340966330038537288932589306186072081792543883366747368347611334360078965309922465480630932860702862249665287558863189777355206614531572614155826416402642561299275610858671870507175728256436750389793160019610335503050367038037555438463289852196445538717246649195338957388647732646056977795997574255507003812579259409036970786297818421930322176115498523325598732195729998836145523742434086690563929097397919160826192608879687779516110627962788234173395476416588377599722247669809953928762017999642718207026455581569584239125585759554046250477501414700862855706079265410759063305348714275329053176275134377351225092820711132457600986010288441138292965556458370968812617197622380213227213002913297877659067043243936298710636045809339814882909023348173431212559439645429589520528938815124451750813875656035577971785963872813781798772605541101422279865836866307716577627038461313375585536196649209445256591730778574002433517557679829508886178203436394903001619016453692303098102599049629899557643630082517636790355029550501875414870856121306449291635391209715511457976373471523473324572869624495431759982540460196011667372350083631328455602121772615597162082360732611725900750647784632991810533619849817736270246665188359168523470897930272619357232371265954208660222015619155404734719764715443158281652301096201750705779846857363923172853956961032889897827769584943914820198213364216577633136210267158654824315926792982070149931803379074056311000610275378970252683166538736754807832515352338961643359471091368476040575778313460637019702977087153465405441995156481342656563570853339779475336645378848222034756164107830968161366405762197364065378288121372097848640684976731342408634081843815605207140783752591189637312267869251747860432062131716637969322703106717569262666119968403235328747049549503025492029121762193143907143240020404420074401613521457817589365098866336850912172966779544635026117497302425754322277955587631020532356211543590857122735065668740232083803551568931297172588110167685791251202904602673250882153015399915095357423973827583046324372744636219917471431505168907113638314023658372819533721732563253239893933322207800434873277447168980523674122830195071201591436077421406641637891865996420902520652359405557903000175155828271292391240333181712560352208660801544754126324523268869473317773714031549991849119615569595370198239322595199477106968413268694060538185494901784937605569361308712412078646017276506578134004399391356473650228053280371576727036875705204506817958220098713503630684612955275532499692643363729367751373484566394104358037857526553667212830259428295373088556220667756102923619404700295568776539270387405728225338706033301053931449406143768219036666119492000822247878034959973406762961666655732280198001646920999860833367717206062220906990613425980438907336535873035391937976450745154547548009787183189014305064611318101821752371699500067279602824390737711657662209791793631904191228848298252047371486564089981319657706154974528625332630303337065523234313689529178419174576121685142004133651775643844825102560764351309144194999789350431990469381765428430505854596034364130863835825744663891128445962513106858187498126247324927244207986544738761948366483235049912641295766261574494137891004356089858016335630249174456604336194294455286862830093409410443024738867796298986055894880070346290028698575192858067172109743590083303472275046045645671674342568832391250389022826412856235952262705081772689897141348994941528495441503879750673801201533543347941343127049963925909598967555020496020914436618360084138319295993259777386156904526667243985869541125113385809122271551463776309871824764929280469485108697619982618494012891219484720367500131792273401981523487205512314524482821043586545642881016148400747393543299281950286843435497824275467272685426200148791785411378965604149709842684469487705568681295885608735652122556037967247968040214563747066775952072843408865735234008728565970832131769821638488291960746312039072028617734116633346319922135613102904669282116391713750326528301668418199598571214937903610315154010176110037377778640217336119849252705037004518904450472944899978863606373333182020958698232652966096571590277105277405805053930943505321330301195212634573445519654517492227803672685754005171692719402586726223740945564795239398810768999245820317787672269363212551673788477321608676194768890197515151332627684923899711278466939399126677223544400747238762766152534872199540551962067278717034536826185560487655236418460906826374395902349336507767658019211772182050897325774829560934471765673496623788929372128244214354043762800935738224541841148098580689375303166714215949809916015115444842091282691818163407602336427681270646941115443269716583447750630416276913761455318160048960048036036083855448438966552541281603527372847980244405506343646355067895589520244001894941085149873948168197205992629982355200302115148081353110293922193145711809519265644486711960058989025568294298431099513087358456200757894862395240329280401654544713865870298101753253477365076845944735258339093646312493240901709269053922961581641080365227891356000098533003112168704162832093364727873519361057960447725005049071782924027336875389249668161027593064482707737521121174994709619978328388278938272911444141554733618341553192121821247654348757203176177930932496237442397690623966336376378039685032962164887057540053487440921187071074965177685471001210787311939944173964104757590438512679386704254685631963369465363426879786677470392855110786343168820485406640958820446766261953979816263077887984846981767498197455900079642684584513095030917346545227016275586654356651257848744094458433008456496922363226976635127934495813438085533854540085763927259572953658522760986345677232665151401900718091376596181732270160625677833194753440431147715132051624225170190102012662651252800794374962907147734886081952204596782935460927396751405133542407051260583569573333149129405567931290179534177392363804445650266618160402205695333890974678475717208557009541310476543523118356967579948334584847261613081875853206651853131143784340027435070841156806754837715502732530390398409444856375555845590564417949622215225420407565859850796647966897630190205194329031840637012126260545664499835964686172142773111582880222690895870200516611543845609579006070533990117813383909766130769370184153929461401088465764082094069991805314256845642699867164955116655172647602376142108818390215773278489089764804276218659556331673074995188389629704264449720321767786647094041604441673377305481374762043513882013565431735370054792795836039331292929773502521011292207887700416176408409292759613583390261428382000352754380394326961983483806828152047725277339655838649009454259166815498013399477024397289109966657867077337541880179194803680257658689791975318304211232783067029385827559938615314098824230513149370702769327109251008513134706330875468857856166275877501818106615336256793315867944737299996150452040942942112037167199518961137938393911312212495763331470958102562069621467148276306351850301779310957143542868879103919489510647688907386550146270501422207664076257506896317219309105145170620992684666286631236398034466171788433629313599342994630627552928028103521136360309412630222282521993321094478018999757579560514389502749481372747924937621400726874843160860704520826106972585688365157956850436088636565494834537404999252659828707460104983862677174575871568271321998492323782022734244962658861574818692283254537684665568848972510150887371237490652683977712041854994490772089593357119141698342279832001920990421125896488093959016125156611022421505112251203473774506739490838783494753261354210093806346317120837782795695927863213417654358440470589069717659296578804028781818518179176416113130158441148238834836018383705522970125937320100426203246048741834446403847101972574923605710527905890582273440529836574483322638624991256513174124812352074970150365349696648489520483264432334317006387753995085377988384856352007400223067762832403220657587068221673528997422915330473150856951829482520644009828780646793098065988872362631791966812197707486716893208583960890070880191452517000852003514507597083610588678873004727560708572184952468580628616643351894259085692038234656400852060884077614044610573050282332785017150626493099807188037019823964059016751216149098662408019317523108074194820705547693787902049426430446813490439169565786506136935282918756725069223947497803227554358078311418620950967938924435987469334162822369602675874445169819307828528004591363081420055215705060861327117174341245655920090647702253048877874186310009893887006991321886228212664045978289806907043877619535052540302449188768545096779243163944163483355463976929876130413132194346757013146640943614435679278442743296709121155319601151639201774194888117691551778276127269042678782128724976159083243530672447263260835675706439662141408073628846062538225595513396070741379068229598521872180795945051361581254791800213469047468780899997255802558064952562297105416095065700139593199611692944402192845229782838289460169818926705449661502836170439021688027656097901410599710556233293730648867632184452059431433464260568960588405897381675297546048874704187479659188816239017659332700634004799042116011643186902821210814666450711104340194674154628841156346950083155863362232809890361793824002486092666229391800697656995150902351346287788803118535495107178472844500441533114267967124374549392862635613401021033450109815384573271342386918176392105156108894751929058163547939602878054972825945887646617580037900927609085781193861132496064073218479078496578553541757480762762365282343277055296846084658585600779441486926710995309589446504074039577215816354435761230165392798700368364826950202914177285126454698832426247034211903429667753280068181036603125139623485235744490307551354944822694291281303296400488376839278815840198049281427638324066815638769441385625140989285964663795597988103719521778639169337280689582086707199628374058347944162696546007679264630523050817581130657456609838016563269025027529161839730109729978550352909827222518777622064893333175344382512904105791225638203805810914403800363231162347515277640100534425362005874885198563274635575000853287463576724527662658583346209088011702864578363416630279875527188005836866687323857901068663193265638346917403585895473682724543736161618739611310144292475553574007339545380696054960344424799623015194448326979431492800189945727577836323250304517427093247810203690792417397508826914439844930742787529428130431870065923458278435997189027983140369094767918811063844180043521192571498455514477888859154689896449977354948860966339620558386092696966579406724510283216639319560765618762029137818126885905764577533745950131952840139117079525519373953747014962082994171491613804029034151531610810482130479428444087858211471466823547122224357232394937497633053048486453585383892893637000718662349532910881180849407892959245445476418597637683545587607044071016493579281812796131500594572874179327404170464541463012457285379351284894727732377641978780933299461506251034740132690131237863446467941359013239639897801127586962980771121111780514565913079530234409979531168810949881476072495798251974115556517113900707330130015768963886427819649340155793808683699510358216516990526823342312725419331521997773563138604651694811623978447420851664882729903690654158623195110504769534474248534324056579144990930051775414629878895284518745356784135487122744260303829309281983031795363482733656342290667373582967516356962334729373791411842647729293011362927523498652500638438452165612462187159821437748714652784570368084810467301705838839839660335842402354058562049732229981633562735617745036901810088133819917356683793778921692114721098223083319875003744489182890685568341207748438859963703844812866529899083974745792276757929506931744160930269819976603220973841997446620446654661851287687637907543865518114803778778210559355074991488338580527173186572373862683892256045587255232219122623432296298216857463524499687358535055841223060741514712571044987994128099905052980539560111910131942211793793339110261048158246972770530952043556858051533780913161052971869784655033735381036776116362314921416090971143558606615972623621353926458498615669749271646729630173625585906854226720706812755226743707533577460646922226597778097518338422632051676651105514230691629815307639302810491714321476800534128983316743819819753213297962167907314041770048289533399114279163545157903895806878365916455506876507814131863966128705343138986470310056635843172098124557347282668457810379250877636302874322515685888984349117765550235314210754499679326584424920522288416142724881612256587986201861253621169535544017190037513198070956907170388969172340588630851752631401560390050858537490293867520715561851157668980918534081176480121527581370668648094294398841127582051280446927867663769600828748265866729828113875301645026120178384462024069765465502141546635338377378826677232765918906270983102405221395307414057035326247669725965217784577267722173707263111291290653201554209412950631220788488643971633061496007079613366457739273148394243429105421827288790848582820618366366255289916795287770635979215061926666892678393732647207197907949061444651436605622200520507732736239522922189888313812166763283506013179807134127832368187981532114476558532298913105938974843140833524761135855204722886237367505260834630093574152688318207128307638364946731748391094889982300226413024470280601765876996970566774339357182416964540498867350451432450049406746174366223229350900895349677548663180502248906019457666519360781664935730934331134730564944272687436172099548574811506135258744303710701527336731641519100692867213349660233968366123054160539545360923237607815621708758697604407880695904779005722895374871203208977398883466598209850355288313904975570904207587426129763737880380154319409049105830997103317602009066684795741478556417601838245959298836180260515763191353446333892067341389428181043442032203489255120343608625227745802237584172359121258582660362456528203260450044825220872364105281498081136022749622456545630479433453059877472990478481882673216837160004784868099202934963695971909488561099815680518674700097624197525182436867526119397160010672203706526392474059953167753059440187324043806560342844848305556536669101290316791134615688797199095501040094180542515558179118472038622063436141259361175622939482474935501212702500119718389494332322451688438363425295378326989181437954115400103551270362717929185448443207434365695925338833335519747449593932593597640301940976836220445277358413926178788072125931714485331614640023373928705252351214413172901555054330133409254794408849144851047718266342458527177573695224334684561737306438006282120749885241722333593714334269131351252721589752273473806223591510969626689457916108749024187227100012116162683798051385823175322101561575607893198985583034589678918373710807082088884566226920712867570275446989235210055183432215651354035879600292741086039528725876528474648794512704378636653827608252734074046120426334944035950978225046261472079496407873969269084748800357700782067227624364485272729561684951248271196623718568474976555215016755951539202282291345852624107059997622290808704246786335114392779261360256641430734970168913519401055797788274197221823665620583034124699519183944447974100088682274254098029313623270375449882874069364349429447138089578266799196735620076712576496774910549005777065173427736217729588446146997273888759399931634654320186039870884639706991968669741007838040059896734873336160104205607503329839300743460349831819957002240058536057377072810481039518548438314710445183127081938456623944898790542113228939669890328409959672135371942539205224408124629485365989546540891981626947507315584025674232608847637874378403127392004666690529590612935753794935286579979272824603006446790090048889063261267084987373322526194336760049749764448004618900890181129217731476188604072304298065025871968823229586975137128264818963598912545151610112218526026186568811289870259733765143967723220634481834989010661401299633496636195178017480287629195067875811398060598698998089714014267050429678197548060653436812691120696113619875871816407201834006678630404969636223377420518783729437253329540095879818022319594650269745128691052875544019770589831429392558755868399482047099909662318323555272611462064096049737613508614532526296076799182993960307724054462415305123467980316999045881110574674594533634781007666021223132015876246605488469225994355401097444421171800034435413318963878712854537529160159147089248379270567958494704326396370533264149785720786411398098406971101289132293675355044729537505040928376112266431029385277861253644387133004360009108370660655347134469630927785706978780450638073794476017792293688003824663345194701175285312673666688611863300540655424975785205961252844069399280167422829501953179476418327481236214479584153732479943078457086165822486572877243975466518095777939830784166559996432596851920543647205335961774312110531162057357642044272195435591513195263960110198675772988834356677751702095090212273572414168786093620831494082828828487472414478973130696874111737624209245849725173166992586655927111765957614096679946974210069896410150309296917803541376451075172206114967271920568460413770435586624025923196232601672774970949884685878881764484849140151457901077080831411883233351749506398185870048073068662498532547407326909994378489161339745215992191918913810687435599440483233228953331295365592056889670979841009973079290633674088414970939267338655765128572139008556452385838828737584577714963749354433077633097770950920144931572756699888911560506175018102959381837563857771398461994875680022860283609621170707355167336834049914542221325038988567419819897189736593602711534697370475519227153850466867052541697497693931431825093667997735560594546452691303255256983011372186490037698580956460112250389064789317695039444482253463288824888925311068210059127739025935340833257291938942164055384432908882475151571220450126192964304245228771520482169628923268564043975215596600978004021110054061655334177570135707085896559127733197422028035465780302923797347518066662597674949733123697952280679725786110790224821129331788989022492459642986696712561672645524348545910763529942814802480536588910676540524480766711651492559248162002621959889183898772162160685188593441291728634243521511387377709491251692322334785706809663358189183485427309512043768366387187157466065793613981268271718017672298315477301543766032264610400772829543647422046097013527885630390224801430171159492304780299905437252292017182195172446440802426882935404297085009283932349716711713980900557643899700800174161162924595380093879014383751960096828627141047590396070801972534280481656837915312641828534327653603494833477450899412004950374618225925268931068853978711035100271033601950149489012388046587273902122895817831483066800777078050913272677757385856954724093205612655998223589490135951051595057403466522516437605195272881663336678649398637381518412154476912990856396942464640002223062941960916663310359629380492922113001605457980181158458663938069478298009587326956141221099977902588511007117013414800448845281547929506392611005659497630373731745785493462624382691339755692305912312125281911828696034355034323448891632608536322866331907503103647014514115009870931208488674377088281109691861880440977455737315270959164398524824898361906525629463831764128121446784178756246838378682542051800461223409991709780507201447937473952043606146211908866681184200880119036221970127552624545631386884426055510827819354171442515641776260052161595693991887557204418742216748808473871129879713036418955043786740062989114273495743484578675854118349666981208944788222273627695252828359188864305975365195484838096391730682681773807412030051090831756448377169881597184275796168574687406389430218278677546127400697018851776965448000038502497247261669708559953037137453538132213439376743845591389993420099978214197934184759355745714759765370417678736670814376215347965303714634948974857220051334043051437386597660055321206136823464474402144654015030591125591314843160315727471448809551270247254213938248973008483530603567605492794285410041531790576884983078766461936091004626821060691473417196170992143504634976618091342230231601011863923867078443520785899863746293284486701931740657170441196334849109965837799572674167901390368974521137279618899742238757745365110415749759715636554828036121848524497076301880395147423700100854542284503330805328248039495447075327858104644620959168532126165380435828044172230897693916701504182282252080896159132781610222364767435118120704970029161077342076433651014357470063372443317365475763849276262118293656372765041735447566838843184210371527632912742645689052091147236654697914976521122409689821471638236479755797804749463094323992947218289359951789021415936346235589688608483214711101235096690824293530016232010908941824515919226450575217998507793419104390836831230256110196941560549691782281890257549749347993818278342019454172822708022528285286291047247267293427933998023093835304686985727511845562575657063664447423945562347403245204751238292273117443666318844940601097872642344464161007260993208637653912233468271869353548011579637305922599111288717182232868241531175758271378398201325389638117348348899955299103932395518132056713623075622053490765599210100437512540897377293115250756098353127816166629482949240934718276090431259181838473537574089630034927973320685662914262999962375618398723934019250478943310796024690222941857970172541309730957923650855282019108168878605375438670846273041184637268036262133783632631708553092060050076034036663315010460281784174384400240610590200137140325413663233689012373455688509308830380939229572266603216906876972406943769496874686381033331397239368059934117739576920554269596010588708319536538667729278197890457129209267405443032751272594914566043450249245132061151595404309962684810870495722587738202153510280363455730687133479780662561008520199368749273803203992606722172078397942422425071186369284927526834686023589408865669780736053774681562713930870665073614313464933825244327499336517579312674240824824407506117266531937540682923916842100082341484731290392099507193440175464004736162431205611095426073270025784711566710579203248912126051570110583827312073959836177795899739239263404871562879925401073519806698959581671064740672972994773796209404845154579809620698697732015910098038696866767575826982371643368772679461004014715939625086969605723626716041856805327967635581494688355010593980236904206634862965727820571847074537184232509100128642826079617005491018317092845185805697503643893877647350953026530329770266842012754750882053369471941143378182681673816346794348946758017234930728589402876714367031911875705206173421766860672110821860187688375386292599278786098803286128889722144163307471763155048543994039810428191054279300461704371968176797090435132790003360254878047197488504570631779777896971946796049191774151799394212420956109657856232593849401297825653253378430903433507941416905721803964263361856511380080128242144213413156103524462485113181776347378363541008261930243269696560002608127590470495501624590127605420681743494744923340212501166953464491362418467849901779219648129276690046376388413601722231003436272779689497122883889677795043606711901358235823217725469652122217614576809320226361394104971791051520762993502644596376195925832586683014035226849189006319142155332793642541547350185756015760317130975609600157298126305014016533388789341449340399390331804692977497510119620908980895680052428757793023383256118247749493656601239463899246672013517509361480089514996227760692827919097599121781981935532619507993756425806111405235873307884786938596111065203206743022215799122294833026569170103169386136152104918532338106444632831616837050334247317670444357735345684619016108673816686508381589796832625291049151427371083878867099123738416481981799232883695607371280918646234149795051942078199710740341968747015927788134246182908429446481332774275048389174989169767170521089547524114558220962568864473902707248771534750785831546800331211943430931545038652765994532798015135318161421563250789100545384149639779342812511297554248049882114207180945933204569318935598174503793768424773147471616839309825657230614800921000355230633688954549413574480540788144670143383554356799742084386885730223573929082695652533255000145619291647874450204388976393481802797633606289393465453615059209309168645613394703321638383003762184492275440913622331224129863053964624473692271643059391365776623467577615281688591369673263873451373717224393645047270463940156552721196614821193590050896812014792075863209486402483477403508494582289441645557176176639286907259601276107139218032357285405799370427706076601580551629526496043112321211717039992931497660025781663806112482727296460258040024664609700023805264710778565762250810905507621792286296332770250751837295528724825134647938352799803599561861849290431544493932197528102862809552387190705704196235195452222361489427940451172637295395479238383481281371625122017594483313480297387783147843629983359066954211056090155769165773265421430710228670431602237830197302117018142210355955798941464777089685467331927493612073532585841373913774459731097466993118227054167544237002077414241846234649974852372692509246335021119995017818657866469469143694715756330984106395441590396410421955057206266541686802614211636917721318709540853318891262750690367803766191938568016175937352802348571747798605092491938289269174965527763867663308839285601850877397698530130051193545916672107308196515509384552200992084889057945800220958193437894712628046323440953910024791258610875691220204164529389617534575557221299560037158270424054038784252803770847415750167302184407620296105421545228882524558877624847920551309552751270639996669105120096794306926245257537097925435443762185803907507766544057771986825630886256282426520884730445432583822246570576237893260654241498689959118130443504205195680212565955045282786173506496952412588313763575254364037277013830617394001540375096073710943795080453522206946787541210324286684925799341345883849212414475079698219185984714467765986525846236583324159340914361141524029184818282083426143640082651018347190735035972615197970241711057984579350848923961132230078362620347600161101933966445169263589486198605788258930920392601925536061407540296560365995436057898641876002517340230154861574089263286704271733203335067950376597023774586801836016977398359355330585452208568949340779341393726996953722515233972513550517610937807318270738638751932203688779318708628551012984056253037445496779481168813163008740680437394470017825579634763678721183056626949408513854851158095782313205676043649089886055866529694685515243456780212954639229765739958338381468735551318614172935822532838368645723170761284827944220507826165003426773642320286658116789141113785020002127796378841900998719886558094231698897663175121261662503447410281899198615306316347281062815567120076528236276109229868106508498054808127770741722131759863890978486753861569918869542519117077471419024924478534778459674915802570287525725412409093104120088172175405386531625020339117431923135011609871832554938729763403155145966299306805010838426558946279122403511994278971029232948111858290872451035688488072554354929222930584622796447878933234589134688530849308634929651449624335532970886439291431824188911645270045678933514656928212158214143683239115485582719624374507122857122005687194979081700417971760972029109148762162249748813400596927984552028827787920079517336745659148706031601272046247174641406499200394861955122153393871947240884434971645469531030064312245984249788911394980314088965348486325288059950599739904555383173179023954896792214968312544218731977005192525077252177467613917096479579898313793986759993980661820270160468314696528472482801898059961582527462485201816114041722510781171742369504095714417858166485634187978721584906087226537570922591466832777520322436658164954568038181681061808072599051437880722668836433029401414143377940833492122047469528132519777761777797659458042868650504686751432091701555431556266350838981337955245518079410316660670344181007903213500159190112290074581983809085937158244468691237676803918877183411505758209933394020862484937649001147176074500367055325932628455297524095316104511828776283101031393269860221344363190502798416251665605705919254392709293601607611683338560848840979179762961143517485050337491930274254556913839867019650147382590555968406143085031221826620983897323283687106152585770590021503084422642146771496723739741529655616239103992228725318014965607845919068382909050345474844876616937979359638964158155244863071081056836222874989984412842837661715667762904852153171771800002949971051343051801534642373389768892653358346061264234181351907596097544004223666636412458158060802870738959724125489470601131963428947135461103116508976173861137506495429457437021436765056530998712417140482555452297286502797735545399877982633643551877851903959518678366654086796701308919528143748640133222336271457805418437142050083866905500838688476404738415567541716883626221045316219700614857908620338154947041703889466004475562316056170196659122289175129851750010129031357116616396523027367068080625416073952601347122012945399186227352216671310531071337298356076534480475909948472552344319450574234219570723784680732027435797510740889049192977864050738194178180255340258973043371148206055564673589077196284267819504522864635708447517316875093005384009453776777078700570624801701232558094696173917814874683244947063900354963142046624961130724700554195592262265859181865354662124725357376938081593144113960364486814597256853882835027356328866023968926366352149124761562188686473732782286927533531674765980181671707214368981172938185191083338058893590586726372234550845277168100005252470434128516932507093050905962303538425186658889984414490211394097793596113916742011124473126935817245053176351391863969907919545441004103009507844625691428836550318255079908353011285415385440978534865380191812141139323596006050974782104996108621274119911431683571034721330384290449065022593162304348269059376914826728507475324231613663342454222917949092689248435433299226982352444345028452439486774925748042735813929066874620072497457043156296415228565409965982014364745305210904812657426221929288909948817524795898964587359785574386095767957929477097338359709298628774645773236517164862028963336797853684005341688686013695626121124977368011080723403249058268781116866527770081282676488905179736286338854428202859688003121959488440927813611532001845446128449516940793214735681747740906149922465593823972426292582073888524076611029226290184346926672348314335700195302701879574963488330704820998378841409837891058291896269283599935657732969203342347260068474031855594587363940913745308428713208638844977123198861913598449797744907706218141826023379503930445183580962636745496288774111683402799786022338495342617536436128969800411292386228774939936921471620739070176345544917004997044665896310923788364670897712872065634700036821175043327685328714185034424924375811169550706211675819474106938834494450200373835055283794037997574373384299390385485845548797885253117593785424211824341221590787766916609715952474638390905815287522921419222569158765453325983867470424278989752906829329221675018793493825791571994146721906868087116642452693937897705516451519350193074571756337920898743543126270097411127839503106889696342396655242969206146320137968164069451865853830260065793107674486032505871783062585938701093899774681552272170203065909748166507488851806653925745702625632067805615457290327624437536282154192721000248656016471188329161985693430271836286062013381654392241038151858722809973353310069164395417564898601079492129262486686412007385821513819902249461858188059023413260050297592911594261956536219686545088996062296920858706926967636532068122039898791567577216453698611003620814424556906240227466594964840868680931338329086540033889707208495049029966789784985531338088290901568904095700097342371510021605446593666255517485694179888185922718958012092725134183552657422747350226811405136411249144365852268831086719755593652482714214118483505499328748376212666385511644440359080014368919426576613465240567102898215555617572804104296570355407875872296206976725716654235389096349611911773754979372985870077092739357956596942903263714198738723648046473206315647673731154421394008032870472340044413218976502621554832175395949075436570608624012699446694004465954252979293816392406787495523136284805080944407261003669568237646347012466775220457514272873986207877834014748499034936674902527322298876027364025385859147068476231815779965383092911234030152188527413215037114601545321995279296499720084384076256185940813466627340003239020540107268525367050371140009053684961922770693809231876104213528200078286529244568241512400481626273450844509040729415618691636305399966445953899272391938051896462664798454128798682193495301904436533427763777782889667736443946606438399023763329502338533631488977668125931535801703293085998092108564057630798721321847290975272450745599744801273410251365053720871691826251725553215051222686214104410857940685195296707155338002459211040705522142720063771835198091638471104430272159868168969179256709566618863030518964884585540243888906247223396296610964893558923508960521607343817333990885248662455778084704633407569984715668409904358632242156726789814825426293200477773011936946928160861948159102481164632780082437173201420505945730349215216321017400732942320983951576416710455993209122978810725831468681577383588981548066788334208112696446575556568888506300621043043689110863184393226133185616198190788510809331247726152419437587938833959767560598614714704166779121744861693300550306534257576757100928475567981556633136237223125726457844149725214108639347915365200322690100623210357930167647201941865812406022887254741048227393742790293763342325371424701436645956089773021060121530586080518812733198063400930330952896542361411133133325360791638267837754543680494221883537326730526522303003691329579178305213663947541824827850190669736840869302471755587603619540099256223117352939149459787511374546982125822793682582988967200335554246434638509875446793060279374804485506101926001730678842404836576349497096715094711784678395172969023139802630371968247722415538736500244445814773306122493457209238378762921223390971098202067997092322415488159686331177960578729569351908161283832139029281094834027901595949200846701291714791803272291514206844397913027207747545725151343479807039567122636492577549874101043320986743189726882597660497719706788383706065840510863987554298456213061899632069056477646973123669286216352848820157229078682060194381901584300111385854568722752693141646567603315108463277037865469595605707014097233500081781776906740391941630021853195668025631255995351665495166576330515241487137586447856564364755677456882308474680170768360079778415318285430435084682124354303697820360469140690738880298352666476821214147482189273839983327559941184741315602117841511709728331570404788904958904517374331521202383022942853039882924575079731312849172150504183085288337066201851344629447529395747486770999754208173115422074668864980594112503776160506016632327348001612298855198714344610397522146376467516497540206554123744097346864142469090535286184957274577837078875084550430709810366584778761543224649233128895543132013395590583954849071783018086604608923636079373873308889485286091537776871874008214294089480268208245172516694696222926140974698315080656028245624916234338388359408364933030961765169737933184541722729899493146229633650509737815752077226059049864176180461102435390726854979279758008482637798399495876643641272852408111905121182217892864224015637099704661016452875422405871917737560209382947364971965431182834364148280972353080801854127118275154426570233196444052769319068578791223330341176349953013488550360090331817333437922789096793239335833284284964378835956127484383181041029442526316615571124190617707149493428190116992147485577279341951454313669228801959093238318629484955614963380109880072515521470076502155325274613315802703332122075665074377709948735483817201854449402440689799910985817408358933512637352278165947294569313278696367159818096235219163795565933035596779049763609258422628912163264977667040015837555731696061806955956441941322624067094826975884009657113491125632977195028114783145789459690529936419275694080879672304024164199924778769874468289891803262010490032074846089037738319148875686786591205730979022574107490878635145250056399649966802159390356594160551252218063681912745311237696201241562865113942214726344675627529784429270263930747422012487230493334743992864393831049757090787669629411023944193744656411492156765551316917991960706892635433458651791500824944053652137832995566111757200226342630415365226157762146392719874013722695396340453879298076483827255799984718162955535156577385877772067169027445316421401338307381588112752450854107101766220027029496437331191172828954804487486734833874163808537276673968531186413968572638062469437350219260826925631966085621241635561470282979217660232959088297288282828367772347881648186756523762063302206646324853195423382446797228500527308378414937652274147887139503558556895609084253081542490604571308408659967224889281640635564885145457302810620886121385873046875954989163667686171224420329085503841860858252273610947353952962009020650148086644026324899649051692099286857395624986185611266158007718713411301907814456796606380010702726264162272617149379986211478894611327308013157686646973922250158773381444307929920394705211624568885370141578475916625479572893719821970334061288378486834444916319716546139379258973675463619633996806979695155223506223849967192468214441409191513474655531800391745465571375688186456837303963963806001777013542016894408782385620917015484558824069150048234012003438653381613121963170668120457050770391861534602319379648780711693175148003148167803884149816658215137831352453122774790162998536763922528768624836070589932988706159442511786300333547440720380692463908395183579904601326286716524438136879721502878173688107919816468626691597110356531855760536671617686115422358904786196841286245112922448513412803290850989490494076221674268088043323456901285714731069532691526473150619415782214097060611896563661639611451630548993002277497649952242997567254273545667273491349201430457267603190588933342945448560734352043745670715058881905984604555555621312794217478083989911962840824812467704444539235924686658640185598425970326629073595387459114761257244055584526730161720441300375305126520412513131601946792736031945243557297793081817732401111196134523306268841467893927331582880266017732101072056611327073219614467846122039374671779588584701897523330996832356855510114689785945215963286567122982782603279637479725880465875276940582397369667884814466256753311335863633895609925196870126545469006022717075327202998122529220594486947875297634095581187247128442324431016688569901844478042501124161406460015392746619494306794280564337128059578207997782091928586373903659143670541394312293160711424108384900927462693984692498769441907750323497688493687203913551126921246170246389476423855623500706283359902306178884408205419772809440135482665687125019015854463452577708398424357963797313057274318403977948324933522036175598578155489607497699143236087963682812744187446566934822497044189979471022639411170742335017096615622246794877841979738446211302186790959456682799910662485550506799681188128923752492142127327309070048634588882997509655971588839577014808032012213568813540402630232350491443065902278303352647047749002847035310154025503381018451021379377670780070340816583943063223425138467569457108393642741630337100911073682271243803071247635258166625787832542187847595840072981430421348510169416490574988158197830347683106162966671439219941834982322232607710590355472030230087969124392809018798748788070394283604075234812615814576974224832945182831361815922035270936956025116431759964783398343631743834526812403248399077944841328456112414779562014500438009549100360629474913256175600260563822797273477421832097356191405611358715614531384868414342270009530776757665873159726519920065462432336649965839606440009713355872071459356889563520503637238494347378241200949650272283490909763237170131255080624480518062529506125791543883569969325547766960255092566788059498035525005841972279609774266708737414948402590608932871215853541238644543196680718111885354723779500105797768818495173149717320527210176491678829351296686719394093421644434754843274904102558739362379434565931366726373210458976183170266046791042515491662953849628030567454185766211206034699092328898857107486887895179563133677495504800230026632750529333878131556819750003230674638947281416869553411779971048365398029334775861355717491986434298646066927922822543718852116056046466623333615529712264262463075577815785579996394531684065378879028929438672291418986789988591409019981157523069434535834622163021492939431449152498275638257620756895081630684390196876537622064611866363152359214198938635073726217426386260300305271837936545731622369499397613637447705852599210746773628245597762317091034194925604774101349050811260417342275268462275984406996027610361063773754582817471429570265791327005899166596965793926315651833860006119988931936268890987186972374945416542957536419303530557372741244984331356656022469152453737082828536999448189078506513828845795499203539344327124174329268183218732603879284238662032809892240515445840431229154849252016387779447340092704560907717161513330687463896978395522590814671830903955042132621835760409638803846966251203685374435344276347873668733796978476735064487717777204481596872917607417160969103381666783675394007336503152348168700722785491561470309151763517614269452852480034955235488378853975312105023490554715678256459584476154523367510817624947046266640873446847547046839351887919229791593505796778084581164260249538597608236307259394493746769831499184942478142195291927670617312965489705559409348832811330328449364206119512971408442164601657004535388423698793397082165861488785625067593823460249211107032066929116161380368357535070872239464028894599166220410873549364398162531531866334306883470269832825363397743586727674311535505092989049805424329589553226328282520853964695569672580410486464219802186060554306137823418885986891799833443599412961669637995531173054867584500036695721886920749769266249380022531930973267620795015647773435058884481296124097841241093882879303826309299120414775314521855614156050691656448872821444581491371558782068313265037618316062918043284542972134440415177899834662736371356137585965705416581570952738218947900728179912904102759756576951396253011832870070157306588412601400263507800541653031142381086385555767218435660182167359320359283442306329944221491747760092844249905537046013163339663295727355602280226284237282835704399273253841821464248491506803953883494529277335857195104556209577210546126307171762479110016670214987060754414006541002524325551820919949927861154909044279163179978817527901484240969036959170317445498841405984416265254536537703638275690015974066964338820839198412937976701339346567671697696165252484076612388945108446273803319362382079838934003113626922787871177702267770670371692428856714535975374894526816212680316564297325297486876176889674065575165729618180930775938999315544849730022308764919727853347591262704267041014203049810931566163040007867005877895061942406916344698001713705466604724642719567235723485800730810094353185799957702988507429339151186245202366389861574675879782875887985820603470231748518693435322964186503029209989346519862993266647460948510771023230287082969705988856767799665245253152050469941429451960538767107891725254620560493450131646525675032950546893910299326498897737760555784219834395447352572103515991038976883236412345161999297993646434668365002939069223198421997848160463058828413044400787156872090804081563883153562974868055823472678250288124865117290044570812848685294903030834626208102448507296676231692197237950333836602279521119087612802740199016019746356169275998129256767854161823320572403555792129636428322106157011892166428558908896718178206895771016142750847018030668041905004523533445309344351589463892068825730887626553273139231471650585865157437533444873642170559079528833439169523101299870515763070738750201838950558142818833994894059752886801048175311392760971316553351880023201613575422342540224477862767447757411849648044337760993623970438281880078095155867624494468050041794730601394527297135203934294306777700614419658924418918099640622360353962525574121224570293788464440206861810076121362657258475575449894734713090602045197591428582424993698850534144260289663492336476335364831663110538670422414905289086762099376339329720116751146611076652366146911916862734827768143486938611916832546563296812130357056066119459684942444521296591865612055833842232317844092967393362201450657416448752403265625029481558401079968306183222200434052878535160814695795020191348695954556431512917284613249180173874919194572748152361012547408733011582558990777376590816952468007628720167765637978888220217055719230559275456246459421219926479442989436504205987249660559490285269607230609421106043193664183726667749596367071635003055456669860351690247608944093737425485654405285875699548027667261157678950008163972677074011189523958790915078139031220644846249177411991775358908930096877090787586923928750312443899560625391581504128302866172670788976190624153933718377493767726310995157242138095487061954425208411846387554405953770012303727340474836882448352396008046297661721537794762971736123108242437406646038083909618210331998299845617978275260391963367443732815969273273685850217438384636246939645879303419162553545971732253238213233520931234813649951086456871006916954642238226992547704520042548325762873477806506916559256536425351437516287482097882587648762795434143249466087071585934022887142557438416583554535046476335587959498271671913381881929828114749149004598587167559086992693309068533693534748822685110838567571804881094789408112410633196295686651070623415253631893190727251160924783209234048333818438222949123951819462747327141871760046017303696443546313719891655311612531855662849211713757562580394103808442144883446841266351222205180443696913654740553788553664605762247491999006662296847257805048190406149784832614935800294388153010107024202244209393944915895564846667764140661534988600890479484651885510879168472977396968668807346758191939559839326844133657021455919052452745126692270834686693971741657875323927690297991048166991263296975902031215581220419020647724494977815427884969787505830760513904023080455471749130777023679245790360997888772663020460822633484656286771573848370312458942610145769318211675456255961810131076378305121764782409941723227406480546514366271566102905086913825165622377753224167235497408947385875318190640146218866944848233366828048370322937545723487183303375418415104976980463958408737504564075953258257412418418247823122783946599810490850535889198148880484593351681500841209091556456782341608666648073966281766882621485794316247846697365002994693770794397437354962301495271952280310944897039012633738284584463693540253693653581480420373254051272988061871162546139947848838023898650695770145842009720009073573355350959710084630991594367112406126960269315556449245769597115208749752990680170513154430370191821013650061315207456458490940749815956357138408660669011632437503640575753246146203931440463681397606141245230060554522103360924701487072907559974615845995057946395797534753648639200271626201659804534476713582417464032346817146627567926956159847035829917680212070360398466585975383660974547969059088337886799467504080922139726399111419197294560808768652607690523789351637342761914003321413831866726936287040300131612509873774137978218607598921842698628751724691676920509919382221387293690581545129946746476997289863577748867527551692798785714695196152665442163336467685014720698754785161455945566799135499352338608593597432935985615188507175533278493016620431284624201719554499929757582808848951043634722616852891064149145287117373169963656602318650178730055116999297368013991477875449077319760512252397376080416059072929577601159816649036272098794266576064884410262938848035100653717687954343198121607017253916980060855069710552621015436440108038210332617820632564354713215015215838949081910862668946512672640648162741249309229099723754148083886947120194686918685355644948001746666447544866534021940963594870320946328426977983393337731401208639315608626245952808982210386479640147095457242718814364050486749954474969330628131096104288930170734913395519941076707844878038096187394559025693089526690716825842296266111074327281286973897114485414589241342787404040378684790780899937999871901967712702981696940777925466027765245295318486223357483944399167976548917192440906189295724506041644555115812231393469877818803339940850282939357332726767287546937385693874182193893322504376729718004510930245677875606989549988865646903550799487304122023151623543980105602924748842211870851689935870023163631718081822292987499407753046681739574435372381585533765373616849772870994784297593674021971234029514904949747594846587081842467713488518069954939733788054369045433985076311325221030605225853339642653293629596309720395872973564260370711153535268980694228030641509372224531382230147564960587987514654869995635780606503407340991935945967606217762890133201718812777638443908961995346659840810192116222099975887152096073761779471673216142677229922476728013878994394673144773330157661266214315662774436994101202070238294761096113376524158660136614246096550274939878592039078443849026362507031216186541169091792435726104859779977198395477232729734492746660706986972413564485643965501463826285973768352438174314499658076060729951851621188310615476797544645082073600664616006164505844709536172706366562813319976749875644747884434729928173359820136476455997042159064984740113002577928134827738288881270273759922249259728075846975862324855131237417650958065137901694622647606036366811620434184515583138539053517279359719630066292103497137812916736092636493623442052535684368121444242302755777489465252410402515632520426083225497113181425666869136100211945373263088669250626640951550144528049601180121171217855307761980349383707727179837674431690049609147525952478276049409619799382414587421422648172527489373209829540466248591910235230648828733222481081512784494665908668205198862329445756513458448462237134009437217294254911977505031149453821207685194412217133023650984897707290550501205378418630448697574041282374277066942497572395171927216423445006879084253890022879658019678688342470725604120745883423306397464303391833283624960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

30000! 耗时5s
fact 30000=2759537246219384599379942166425462783980762044529330985529635036800075868850360565832972977651204254341650306308369180105720079889211173647623998433383137184967254285857311222411266513704623208566663513843971255845392867767001593521229857671767859088377853025833179203708263155369841605042154936042598909075856430852044551518050502194448043519497955816834830283123674559621734939901731624301201076127184975016435078582758140749216748647309179050590022964374055780248416842708846029319703126114712880745936613672988328046011830192791442058031755785367028960875244284379669425722672437661447890883333680653460187556607310620760624863831955643060449770964294419715973902971319723229304227589444780515214690449430950100540415742367996932424440431797586214739669452308287884619723637082329610767856083429122271762367853165638037792200424897744323469601725987168135183985312129576055394803329361269420158952420732363750350565539555718824295251390720211981861850219790186408414398334712674366220695210737360395998180284449600983365056185334936767602233897332076408280766279313350100807738919044653247478399468118224790726891451537615976475772226646069039773112582261913601947079094800564569740187199237911957973532450123384325709303156034819289852972208081076808918657891225667861778617600382296342453736215067534260599130323659891950344375618821990241869064188779262616618897782064326939394164504330784425477057703856113642494573055800701398998963778523174197971199802001249037862845401178063635289215790294053130363790762505449659923749717341726603207883570408989458595454461800686388080985559933787580708157025423840642139204538772016958960796958234948680981716072726490931388029167387628397174251392411795142081474113071696284333816435410069606648559380559361648810036548685048376296802200885869157913750102085298869283891622993227015769198610551499443896668787522586657638366361861185065868789860262650393693681559020363377099448893771462053316082728402453902883282097471269671927157268145627710601852207513482942097037750095540240118995336906169072282548843691352328081773632006593071031108160921467428980082168422596457430312078666404161659045242247266415626039075905434725695033681187235461441433272106383854253863921330561679790688161084346854227861628470199065806040528878416365147012553488001510947290931349328921338036774993216385381137132198182213822826706462523411701372200962231508830152422410991359005334780791972234455111707614330060647186198186705417071806224684561386445865470294716932664992238954997164980668517505737006150434299401990047422843039374747072802773381568745666324627336927864070406780670472221250161486534876753369449034210816591499706079873555318837759000601217565989591615830088848172766037509272260198212866122962773193040992732475668744290293441563775508225765896179094443465134127259097828816940310527711661703122856916077848492797522352501849699613771129344721487000451117900504500494349754823393926598683738801230822884516230905466215234586470092767967075006718049873843332035209870911769570510201554488746659767340370907522192102092895807808154965844350552675323445758606329395240663588723844072582572320031778556109916134399989631719361246116537770937994210535764127053708470431360308218050214557421716655342719329280026514618978851803167515926270028131927132527415110748252482496668082753626428950993460432257165678631797482334755340819646080918594425560027617623243974643352853639236275249869486113167465238304038661944671638842461233130879726475202620476130723649447508982890926697739262100733274509067594085211947714973215422291475490714916601455749839677025731012969708328677416181824880040728195306146916808977011533263938748090400501428506732032622152245349347098909008871938509618096541446720070078266026253379783424065642817755760294130292731164883321355194077644660177987107292741142416702974557004421915363167190797385176561862204121856517547221477304556927478122535180183286364291033462980899893621900027788623821795890592436107415415305373085880206326669477743466164130977923094852333326319682063089795528774550545505584791628853502429309208124825659949873391297734080143486316644717408772461437969995993835587464337955514558243435657482243716228991540517959712884874727902965789744097366018405325130174626204543754719224173973805234914672668169226668749635597156291025160963857373913185612670898882470532508097415996917818395396029829662032566977197341987430481602278634162890641525874265189583806703824630201662804577242778124075688331933374597736089949258477998952385806671076650244897747606660754747659479608096469466792754887728256064795544622758948349598302469084048767397595801258861751089595262045036818541310761667126275320778503327298374574489336987797983677667493907774661985914885182876149913043326798472889532631816523248356892754275136357341654851840630907499657587091416720515228213584780954574487763071837820166784854744725552714512978440560092178814033869496037535303356045595346377277177015741028136402584921342581495299917608353731999136623192384861471343498386069148680679254115584795198815722864836145042759167289141951990324053676673793510435821860722219436652666000172254940500972611968190253250821417018303478060746861776006128050655579295517099133358731649683823475476934684468514076679976649073433685764375709709622794176256189057638363966446857528130934087922765134298894856716917846359651896153459392531445858811695273947551047244573695114577428142149069509146712150572945627477931220655762221313696187023140684608642699985354793714520286209733420553328173887145025974816839881131240297521051158160567748938789788758802191455026181966011373225632658077328260646368617522211273044340849728191262689904210443050685246518161881354611266819529235483529434559664820320856983086401447007106350786637899904670329501969941534324210415944632660266464710126890340439260493925477373257800886864064766079048739244939764992287363044019376942024124519168603146274184122368178503728613847583022913591636733801767638661942068926255034595860661829001983639193951988578011781357582563594096892210948705220648124681498117639466260804215967227335897324091208237256609968880276645881789856042939488921187481124837310807143899246987582176938447411227997165140375424840996946300964402244009242526058781232284932370012164511231516067396889680176125580418173622376177785996947162482153165293376402302271420347055180335094407447873048686059015160426357880447350679938179199740580090456440213429977642222773094060569567199217828516824001277568454356890787288455562278512474152545148238839139764446839855053352949395051652363529328098463086571991361180883734715062509963494119661604168657243195142281209795853639391331162127257222017387126045704630915314148944244879192223292318051373390846420413066423694128229850953416749768560198103035606997015176797652610446388363526403223111037197720159901992145577044202898053165473361503302108448802593579157450954536592497616371569867181816844046653050574854017025169513119226089778719104160047637648736726327993147684410796366208717313476650003714337566259825501422654938230299980917331590085034007138170874237835271071635943992277598308121453421252376776384649309500993134942184002196806037759858729344038127504045786025509817903804238600858800790156763764485275734428215185111362823330793745547771206452888212147444008759991038667771775718269774221890895879572773716774106962133288736490064511177840954974998606471040305374534594725231213270134997187231427488632090317730111810010480810652455084971202554049671586863726425678898128503276574558351760964654484611660737164742502990345366126536815488223471212607045941742389344186626779728658447604257988064984655557642326458241752935530776596352103967089074369819398440203799593696114867790791311946530092563257032840251597684047607534358897929622425991749525165009478239916042202561210505859915558618533349717811688407377311417027283349800487859035260337831435238430690163301746276913178845343078402141465275336293744443768217157615249358113663127757649580944883286315545169772145205573291876312988939517067504290714508152842442862065995492424044291216038036745275500608507809109504221853305667104371658415174442201910136140122520825895616900052543814764854502151445422324277283111351571232946163407906558917558416730066882161686822334168531646944063567712870201071389740884508726701373359034939613896515662545142457610663248403964843575044099896921525697010610685790729977711241207776818776243600939456518045584414785134879887113116429451133939466907236800167365839661711005112302393659871844095497482017192949256329192117259793916668582476274987463498441803243429741282437915623833584378934785067510573512131379619919114558000121608504816718785985195615280015428914733353645346536743638194128534189666483589138748395287519928691873621777908530106254667991491428112844932153330266102923556133039298453418134600710924911355071983822154150442654455532800945860240243575523175481436145770676875031448526922412435022420228049218576227173768659352816205692361857505610389794412692854743141732031003269115737079232192473214969291861155306317584381440655650366340042885669189015645165901996036099236972419605502542394690593088432855390380812108475610230831010682342177392452613519700855529628610560254533611685422064855169055210868433101695363156895912925788676596821106947472657341361372046326179692815562498280584729011925936915225491569960621408889374016692647292671055384739385971465204147001700848293655167357770636548614594016098550048638216917223701260329366030011089147984705017640597137503114123688287629997150429744575662692569580187592483159213967229923961804306568620474724623109597195965598319735439124367590341139879346584587823300219156653757353929233809531732213144959282416639313991395337222826206119303994947170873990414105559885480293914184762446590390895844772911505986237541950291055518850779435640018165290792689416767943607934824193294085301354655465463266062515413695981709944310811894176914931532531250241486519889513515190368746365154212266832954534163415334943137431151011826501097080819338137621026198467066500482203018146746260316172570429613140622391528174733637508849469363485715563827598231697761689051918780482175981636882228294697450441186152186110899743107624043921251923306925532822246690131830061355676341402128253696011468886689249925118925683684613236638592631824281375238958471522696104420796328692419708142773750053435837660425247690732391747593512345343496002032417154533279243904877446254751989853847289397289422836940841053257165593607400282198117681187170762513159625154774903325173914592298036428472525310403631037807684550987167086158724629077662830798494409073903117355973887186927913065060551614141386038122713835671388628260249603713722461186677216678665968533498698534558678105489444185428397066557023714447042325434790336687777442890975993225288201666041199030760247322754243570419223271678468081262973792999339881578729975763148710256823847647237796047221627688928254546304206407437874000597890056265260148420765439715106346725760531098217621385715712851996685018943429638870424761277267802249299818225060878945849994264756810867569891556615433237740935715452894967506851398893834493126374373306235473744622569532319738741427567294471855973580841769412670448337935229067349892337130363738760177147127387902332293065828548159220457653333705901404830806050001089006807102663201918182006420280131805448022464557828315082835969778760978122234746756619930139181891549100886037666897639420494732724296959439188698165351804529173000599275819023938013628810303744261484259542490884016785478576807798792233765045100637777536569222241152076340251091111013594212631457394776999128210085560606926010838984031818809588854944113226345462798482146994062514651409287551514128254565220434816653736388479544986927868163894980599880131656641227559906513365522735739330564486725879568753401968137382402852592108139725989653856612136409553626538115532921965963501390097089325909877444251612951760113020888129373295950547319888201246177749340916466781234369459508497137444313547268006327918498701048218105399144077820044891656008052884310951562490017969306064809210008985756288997896191318471696128913008671654997688694770046450254730318149222683216984857185192642271675584316728049303448002707931633794637066841812408294360568174096172616810405896026261503681322998358438925009522327597740871535865817334210773930606100529815095736770222673635863599698919395808070281156709976756632100534520844873094840902210495293468481616349779636059739718728410646009855986962404275208171157390869350857908101863745425428846058522605294334725939382024390430125304265154976330234093703281300124510758767551839534039234888236166643830100110437593126998757422681032774414643540123367605482988942784776294889254980279417717385538069507257679524776163859117697135350613077849539980661488080381039653174672571520786567585996993722219893039224432200141775190201905960468017680468262617680969314702889512648874280417123352035427480904750708590616790274703272941102048381605063979777122931667018172536549147668978610939594396736112758798557241881949953753181664416196707496409809484986446952346636125966926993460271307200230698685547488097830375871920810493159684622943770140896189772131540921962247131942664669561134766571879031919541963307182718138591320645612440108688178833166166935006637195303296398745687745372835050820983209694222514735285290318326521213983198762735820868833617702983065714377829008220344522050799855212493924304271465377593310486841655869622933027594847618407294966030049510987948256080169814531156021972482465953507460978348639926716307626330476090516089019776359160754118726034290422470554038254530165173229142577494876503954060925228781356856071780060307805150399720282590270963175428688822023971795915384147745175271962941536850691377479154081931998843326853856300881836057595888773862431060968264468129211952296519341752446661411008215906150636321010699909679394212823880377875714796373569576577896511727870789881261791374172079498694234460975787523399892020532242894091935173833091452257854849191390199427277172030164046405679630844291044534867940076335102569077182642847507957880705020141551327956578983736892278447560367501788004374548560368898337448420921548051117772805611826965200389302255871625744404932119746310259644974622203763934911442710254076002936059614437297294295731643207134892859927571744925909957973279877369935088968166944300647071159848204874476950145941401335305735067306235761964676474443332275160309457486465978046136524535841401777369339142720227497558974896093608437545751852468146922217677615478392618774936019063178932428198439212500601155396847178452216575163209903695161970926264964813519333853867263659969475770131127452585145933021665198253432386350606739358875729457389298569483250975048261638005769893335048412511606462754375687493576968455943615201746171430726332019878603445090326963290404254950304125358328642436030553323845347571426149671533270399060132588042486475337397894960394227675894662890837447542279451007782394225716682807423400913766078884612967209804375724236023029617525218383448565657526159806791583553950282397226366004564279872529611492868363906014376469161160815786103124453897762232189443746726907736077641230258809288286355783979273156381358029047996317146312049414890889840908196289641795437282218275055313069060836787783169555480614681988605073988380827897058467334117147160649939354474763625723637892054689283775683548021716426125392627085206456940242114939664577251141953888593200211438383327344300245712458085091921497899216010164881556671416979927538770985251390937437741987544438193071286435637754439251264447963967088295334532916772985684520380559015745297576651298671287845637949305686558900993807151877131261194533475715837083887522103095921927751608278456109892771166180488857266282486328453316438362648274981995690442731974185679986260138214804516861416164094677781356507324201241846394212270437589845077622597368715489917850590916359522084026173918108029289810167244822325667491430114981909711503263317084902109298255679124059390252956720641418490140163606030037514524568137075529826195267109826685063773819684532340196135098369693670888855237984779679683387012929445853023450426194933139974812805374742531773834214009951590007488158554330686984724973591906495034573276417585711602801158220398748725481198144599922869689714362475960147412656681684261590409911631067324408562990947317471379536681534142962747210687025416603621391861771382201364968414373811666738333307935888760373363512107469396871290425002695732862058532602509622723582681215504099874433552932292452796024972043491472464483345697482318269872713748649634055146188004436380347648225352073166272467032164610081867098577473021897204142156024378134655105207135773410645637940843764162681393318254203312971481073879680796784325990081838163245986240877152674638898570655270729128033312980159634695524522510418489359809957956214964889181981072089019492460775310339528837638843968860284392514870398714367182444678394150595032264716881630211881261548836018381243806497480600976039311539680004947274378461603803327085115428880836358436393217208914661044646023261368624097791976217658049016038333847403443549639678882908802143303865166974362964835720868074600119792306331906630962168626512587528932198025007427493333517988574674170379448447226774355058277478583417074025746275640457936566586350336589958664125830350664468227480398662237658530367973802265608781093201881135569435202428161301957947445005313200464772429749913087135903330390577919078187732331301569512077638983173179757890466564455075054769903348485530855583359386029709001203135284837586115212766098529500418498312492786049068998057708883147136551830812328487350290685900511995115098126959731795823545431178368517761330620714508987580650343415391623796242525831923219746085757127312926911995398724328485577644284400913344593620717215909955973791106520251451657613049233857691383699000297616489834876688711243530051434051886364732028922669249490814716964037273255658535105311976509610286732855752569475995907620483340043041110417830393214415301981391216407329937641672446670291477018755885224453642032252619999952100868942437016632748350756958116405551271814010676815418136086249046045324376489057688205300639366611227445123852123391803936173775968706004999286104619101998929379351808642596155827480200590725351700750260125701557244967506026122102340504851840052032500842860951474603276301206797048630950702383825179889480301744025063799852157852472967582293324390095006915405373410125498744833002531794486848232110427481822008277628368812083921144000652558494610651472965202100144512297459992886612918146257203272990443328929184753429486816003058640696072803486150031481173594942128474682503690020268203055973594382432715576485402381833748705355606513626453045619977768264993024643753114279116974798858499226941623634309627339037345489333028482620901467000755432276596920703402108058527656195683693739015119132321824689773712871771881000848084113783802841558235877688821144900419843352163746487929591251215533217080032244905551100555448047080679821439117988307818235646078767264541516459459725854428438819237338338029360003258215438591446515713071476120671303760860635992385295473818260618969530220660002159649682406215852373864620944461384905312351037426140928838702871178191131753374002300205169495849707322582257458320278242351974186163145808551615193892064014547663080798779518680462327285792753482269888676526424582247248938143875369406346098267526112552994971492256976539995672972302393044002293997797510489362623556669170820904763462038196054408268267917087529025639162105591093304379846869564762213317956738396499708838763349771481968881085126891176224217713321959489482143709246112625350740196991293547847140773397051213473098555778851957506695520357316349559687987711866113588408328710137456950268705780490433407024553627926097975547785670377516546034469766802405552045948830061753002792173856763841883127742160755286343494773061600344068323573084778634676369296824333682641955607228186871229578212479613305121454245306559982729219831038227532374511342033056504293852396991557917650659288718736619503259447282143631326730180722086726669223494435435968625372268645377242597379979269387374781582809242024316711245288463247104525901517704021379158375018126326599172135644059985077340490509480519970499652048441641168880796915260888588391170214934196599198477314111269677619993563978216901847883791527461150500038791708040172670072466005353669729835381090310751848271355883169099547449253456919346841393184497062113165224982678982568714507371035266926121097745623324160543356703259304787979729447512079745972142927998016830786129393447107556232632073286431077467551738535496335049089884265673160065837236807450094394569685772414291808925861581132286389556636543967856899316540847339391522285252832932166172230147466758418613686422506980125096981854662014330718617700050100046813478999664091463670660631052556876432067177766863658672867585447809930136161646273907430969107660070886849923403756877909833953015940561959315480642148784153967923492861922107076212639455932563009810279241325306085076920043870988498271496909016109023309674032026788539471043130869345726458871247504225809171674018356104468442074703216333541604921650186438062346443651716009903345278008452323543279348681779018695005696701155320321689264068253767167489007669357128278434140173615359841618957802152895966957154299963034072410639717973216264805293461110538271280289670921182648552618266707597200181258431217218588162301908621731863248788794936889535069041557793291859563576121861752736898794647135034285952041606793521429547678384352965994137016057386564711632909187962934847602564616560708986296760216059126898882643064851935899412269546866952005902519317988311693265052737870856471432638145638317073344938927004333675858946918228751604101542701789994405940389513584944985801753743151782179114380956926908791444982558655305828139653201172099360496327964684465451976879122067689836568035531332173766048984893836234097505454211213815732936278167878458678004481064729836085053369201153743388421787526764529810624473466196564419624519911774824604945986161846294802621937454935023520384551143629383526329894619888067310553612709102054223338857342547416580928500120810912949320214333162138318780795532319439167569561362441757230861532980183691947233007133522685804529692566001996367271910704163979218653384143648081526571150726390098405121198067222751206346635588402479390687672696369807826000713046194388778739710591636615392805913158913659479381498997840269530431579487453129637395761459867093089587221732517049872479435125362582193572163991463446163307922955662658188163974916496261569542563655687161773332909144760110217022733920430230579159927608552099360452313867675084800424167238207122272905503959936170220143921516970577332545967834467320849863896694411144500084371520913196188903451808202882319928993456721610325881844178445904581960125687695614824123722261275359511637722511149705053818272754320622272640384473759364261333343726715781426613147932356174785767855668481632431626203629208318480116238481681127169957292677709895429059200493171340738391241067296292900721856666796973791847387543288094607162873614562115657952288758448229402843343461748519311147482197293021180769002457405208968766074678418024681923634078887875649673617897857030874488006491612611000558749117913817203491938615035194722708606804085288411419865302054984860366705401360054359327144603752585984061900439347917265097508997175278050755093537874622223319787412699552742654161683046290525439317972079936371679905472449608507532556855870754192049766485095869921289311399175269861857830420969430631947813343131839557786788480901118923913319556690565287537382542801435536619947213755217384669689097874633695614067588229730075794905528732328423750758561031983735896827891483137630931193174992254815237078114910663127333536486007886289547474733370606762858367410943987821873513658934670363955943940676966677808727859186004992463803156001619473922312489887206104441577823572701237195321535646747910474564247897916022556328259190489081576418528073928829518933368916657002127945285781385000102272862234526565094698710646662183041633714931665168849960776250676885875844164067168049408034831748079580825600771971642933404585153110637762303182183809443996840204238055591738337111500459049254855463877996877399900505041613670774047074032756117944961722247608019783670896160519115228091678560150908918027517143972429864186543895907271851099179255981925905884360794264222178497985049008823985759129272136956452492327723654592810246328759236420555723146691712379896904152190835964646391866963591075676038219608980657325481720491014393294778514959193627215054564830057174076554228406525644932084776809569757214894166798476905646596290489685162589335972538504712792718180358226800755176547584194710529336720308626888522672021395734185405111783614895812839947135871017700109974055282097703214267963374252561401495731606746358491573403843320259661409797760614716241404652464282706843636441760657131498490838165513159284274803505302250823136881665890545809780027822081010651507725057227626883182003106196692182790161142486925359320620238913379294382806717323390320340974241256382679277799545124341133492055119309978484612544802768383966638265626371108812508445455347783838203269615994695051169180231569845053398386698354856141960275574918592661477911181199898723791297196020410769345979644008728051735363413998611373645917298130971927828067296675838832687064709135326723487576489135058008869027598448916484226350321140257442019279783187313563115645037217515608718934749803346168790715339429215453492273263475181172058181631059293585187827624269517480560922402852251972194726172308179464022123534375564405741037277030858277115370749032936504725793669894393190873829739974367278697376222279098012898891675851784093265116829279587521550158074462985234710579067825033096370147971653939686196180843960955468488595991812444702218261909872459654277281611127223254124453436775483131278338772532059304966299488818989175770709885688271946348352904092982462171578445176078024656978930266246469733706005639003511517766707242819611134131741504927996474389076694627189456928331593583634523539693752121134742852584157879711422324060790114917217939368427334504059700543554294636869612333914925887943742478021189097827261331060108342136616136048770762744625661520223979198915466500635213267357787139244319853344566755768862996245555011339956340067516937767172775857554664551505128898659282865938057768792893079543488685616148423521222205067945695496210632958014036493347743781550014245515637619019759048706993255776973275952392944380481062822137590338168465081743359056805341534018824849251058124824948037219876751438110114213988781281988254683884402511066902206731573721590484775735351518921687125223944382361763720085946406777676006369719702563663301721514957648870615002975783391671025786690072596927387077516109364345477633302991531498501808162810701445549872920496921766933656105692690109787990295501468048752451404893594044095345826955999879667267878552164963481563431501642685433676848194285010745731700257733768843768469699608175745147358903353575588333111508352778882978285932791518014643581201214527335280909190403555915457775945919488946027965700644216699472190251136837121332226988132069440164589877599140378532109969582282637135393107136862803056023692224811183895882942009971556169624634380456841630542171086884620340369803064520667321234510081752519991430736021759089154739505140994753124779535707417719271094719851330097977152449175800805885455893461460749324179349982330573208926842820295767288852559458925080561352996445224222342137540225118777409218505014846318907813460171293663220927988210455487935727385495159485168196560846910328135705395172740280617389330400117694256763204979590449056531564994182144000790353946057320461519090200290302134434736294590553599549955507372483929497937058329020978125394115455063685181569985703484174135237157504722464652706376389820536784472084125831682938790341247895141151672727484116775162421127605725256363514592363037530427871476280785422663153021642770826649382569229104841190696089169905121216176048160601924130928900658521992894758809960683762097184185731432265517745433665786081083040786593989343878721542770489804439480992390164188750094711443138335987990045105919957281344897496480787142123377672708840151474003564837562002726368508101301049771906830634597161128939181464333840045027612587531067410089271137825718099548653534162885531889204385078973745669838185137100058544954159562661176026985171216313030396784820208340259978074022088037850806775270578245958440508763648862221578230647250732649780980748497062560230587508338961601379240570534493618876652528009881260930064083043787380694860732769596661809147983643568283229748199915323129911796781800605222099503652562333107725047897695987494537409670235444402573505332995458515506300466492705642952696418401529403063137963034641743102864356826962722259486207361721840644460311594561680847980838438097708683379120034286290634109210241436381837109822716920252168173032862139396378403629268827475931865095956016054610045612368159998500522607981825194191667504449585120092441584115198213350673623609093065346633295682100405322276122780676286719772909722668744315549743622107098120430198050945345091009966558993043609026500737985316712599195872422274792574125119871313530497060009720247521500755645262469238603148335907635687489255525818414848728258321530554996063755164776626110425936985311651832354671445003775939498332555880425392910630626936370226948189389863212412070037853301873013898682823149881519776114052536859404999018069456277538891734281324642755503819442753869817505227690332583324432329396406861576164000818143076707031138099160318343212824285141504087028040761368614167581886217448525091546398008169180795200794314907276412022460353677864669368794457977918449959127624393673764961045833487706566055088982052833978637251341102983411381973602960164296750830778973639458153808547420447579992247073781981324465298481215584812572110765992354386576867923942165095011493374982470889753948701631693891919331902833644967029606472878519547712235856647293098458333889027820379414490980108007305754622509849251261483634712815954299707663243194999155236784703261625570529477833484304247544727078725545857483181748846598428044333476317366583518494210726314203824314048684630874933555740442910178863815680419191103468445583067970018166938192813336518238381382985813817887441090414537594415262758948378469761375058929399226925003142855622353965065654759229551392015442680883091447408062639527131010882739640958534909970369958121212051751861365390425390977405141564545677001283129175612804100839420687230295967322810608840814480599385473132723340502046855432860619752484420157909017604601097374771522688338578193024531607985697261849417390202179698410913079789370901879494684158776399903442725053675489744723795863844104556914621343289102147659263700784445652183472406825225126582788405103602861992688926930928721679012916115029677504981270232539020119201670393695703566072315996099569598299404492058530442668750872828677511774070013077064900569191127878188760939704902825128023774668236474813808584822943585174548504982253707361586066114723799505503825998014875102939164339658578267902043226779708433462783491895954620955794345322053979211309094252962474863493830405354986889750396122392365432164978887472031863135391711850467309939702585573185129025811667204061696787784561083585429255550377622495421590247810452787588559106157609084047058310947621532417880715244565791227249649850183190649582111126919895071214333992636715538078270016263093365706751754338894605465049443552618875802308346713847139580209047907374031477527921477218968802737711071512672785937053155394063138472845360734661014620566749699959610546456720325747008737569748877573220494494188124900659245044646526532618463236680360590082076622053195291721278093015470926736485600367038430330852074572247846446160130750787138630788409660876254557284197115302817137335478010635991740831443115010112142107568300849468544040819320451469038192348845842173080111708840898614365811151975546170015653613277083005707757824426344629378195702795398804224006939629408425403943866813215187053883602773193666412429047480682917665809296259133533216573066569427778481866455940293836512026939535104104583207280322943188036533504980470901519020217325504855457213787014763984831212855981831555130037387117469756732821810245693235220821606258252836497037291124245633425044775809947957867688452077478306795118546474632736929022853091588931651897099222452485406097926805053086620561287753939469542010424290052534421090784991700149897870564979744878904465211051144709571787549710111540442601979343737134476260952792027826183509687141633947595938553164948979069169828248046429779458604563349537267825400708804300564817566744964501523715134377571371896238245852513640208638132642647859405722315997044952235488005544805539843879632747218297881041258120999173356383499932374197355243243185723044688739667746891668771835748001966643195851240258278546713130440373039958379386051214425440745832300139726938493436389393742311440334629564200218014947820632881319201406104516646317739454184623468626567631978825679227144983926608438947813884833259136274422620598898869968334451610152671898544630306302989131231337757421975534974206337980007217728187261405106016678858647692044744268970028978680190075061187893941030748571543523308976996596634364945692526464052066684129656838834382787158085764579506354947166999515819226618162610274511680826020769075719338786471669244390190963643524190008087571759444780549895609171173981155220358935976481712991113549976217853766710427753937765185282142353750073809844802799913337797640983827595050734161213869399407254855943402243287813661920021906455652943532051180969604772864272929244607697386248627259099419018619115513394480221710408186442586781449552370448328522957630679276000352866762630219215246873855010694786025872471765328587346851148136974023165442067940537031222371070455315022663069654266588864293355555737796229129255302204504387627402583858392061732642267010977919651077426876630953531742623591504785024069353238664086100535428919496140736477426023691625757844384724892488018236313782199864455416384179910240561427500503458968984265517378397002809686211166411633366321201154915765801011650996276615793344795550553409071079013871351086904929157430178315096635985935809256135967415019486663221984461899407534343722685164081950887987732915776820145590816236892300289755936188458915730098413870604589631780278394458026658042611499452014620047860068976623953642542835989391736361042374261911676639238523673315791854845166351802492471092061438063769878959403646335991502360951963307745003210931817514077362626733326631035456000229144483170563638387023880950611427998211968171346406214719926562489701640625274655100369777572218779929105843249760756744780199494729951703856485990502292209745604382501210345767784309307928316321660110943234549147589827552616803071969067709101696924122249497308744142588803951505163635895184007669498184852327914377085701496078465325069775767248003657865184307900134490993345524685637699636342470370788101590881713107623839734680398785947576572133764179393179452353413743488469543441709844227107224818270609839645031740351496694486207766638724627739295575919643900064146791296939101314338806407297657084596676275956638902494068316859582289282950462328646858217057683761294367461486851109184752101166831173551375159211018036025314125624284922411534564665535870313034831128759660456722903415076454419141810720132285825017543445358030078617297273699068680606665871841486205524804806439473524621777714872786019779647290218794940541698355659963865664142684073717311875616188818179751005455041549789947206922154893604476034468261937771471342635016321908741360919312425689246433700212499927651640890731198313475428379442534097319066116790868367206567827556876863593340507580361250590136726033221754712162518062661618146233055832116324094143317180406576819411332059354163322874513288540508800605968722762072856171965926005818546701565061440582522052576941132717641465246372106683108069455043109318239568101095317132826434489618963538264857650872007084019033468037566428371696745572913812484487531295943734309512927454684372565215187231419651421477535027175791172057976375861646644290240280667474452790970626404307162834692218485235385415226833737229171428186359744050575638350890195438507168073903603293776244881032784099626075908459322416934448076642961410789394043669969728642413298564358395224036145027731462156527664475399840392107084007413176304974948932506769017139423239413733933733911250451410422301399391245527669508240743379374168219821955635230732458993930776272469418351797331418612695336285016017976852710577194345436273383241443211087395544182917728999235937856166139520237997914183395571789834790030685861765259007593160049056621436457153339950028837594307817572967084362668607881279772290881212746038794017119034943462215238639059120723556052121231265192401268726363870351228479307112805137047223043209065205489364942294063747577022957444053616715156570941264686202891876944876166419554118548515340153064020563222601076883726057176352143782850005050791766058084876984856361228248103837078172259987764293715168443743187595405000564510643283319806602093017983168003954923975330054455468328390583535775336357191140087585821459774017500501368579621021805708585425717420300216667445353228014747826046300881765740157518913279182459505413105462171119956653900434920119404860091259924193719561440099337905217370977300697074744785978661177885451745999565793802855259229814021138750683072208740526449603556662312485509251956720156697963884710204948617040935064341980126271335415779268646474318943097199327323298449805827793640103289341482907714373187689522824036320257458955694596509424316802922727590901573280141863393679105900027389607555038985587198480992248429632908674058501421146543130473266048756245133261965754597568774962141135807811265751539225961490602592087722648062908017962199441957531984337527803291897194860575237385857939086916829871857657655998312073540350662528884249170049091740650222698078837619520587944686268541031690932296140324603689918830281210481244907838739200608047568303099315950591858339453513342115997208031290587455543435244893898240503833864996418302258899746287820949117074086311691019196505754073407748480281658517510442517230042930687283694291049161351467660029534193243547039335754633554880119422950586978671937001283327725130163444245803163002752959880240759630423820959427705350832383266578902174766409886504087084623011822010259159528017630247549377189698653619587916971814606595082042568419468195770004540314451839827107684331397405927845903077688708457005505412560759602979204862478250325187995310874410623989894183958129444091346778567874604899111610103402384821568563818400565958328946472268302376234715456995669012121517504706918373403722349994844502050132302802903826933302882919017549087193584369584647572576296660288925299292994766575412835444321800643963773814786039284535758698900238962117952249022488478333006010070241249541893018741655273854119158585343263973502250621437159370520787501447964074716990498779087822989672141252175085335597064256765892870829964826700313964895317459159523123478083433477997877690836182270058468224309478352421351456562801010055011744520426904515303102213043685128128894452343648320567709305060493515670098008525798967157464849881585080254770343932478013643628122257372070589505362186269683046161760830301966231505572440988954292917725479331138879512345479975678870014257652569425190749359870653174795875853965304499168928765522977578657292338942107621999898567213846113724350945989295553771121494637126712495766546687047003656755033119128225669916367497847469214252162291695731857659319039501182891533378789193884295008065447796523811346239196543140030954628667672709086981745754666292519554480015528862728103085766206716571250752419396906459974587586797145018210088497013758882916968624594981187672486155833880523514874995243382007729588538133914569701143356485769996316901436798855196272616540133388903228202309791482254610230608459927108351575900355252743662551541385329080838880864066429364561902452534927622460249057905579492425209435877804330280829725464731114199424914385081177514346752029148733044787258976796500211258924179928145880445234823722428191847457100342515784368794779519471177727881420221573843300797243327227427119477435084595595540256425465568135273430131662953774650949579565001607465763273922715497125987530055343647068344864949695277406040369063006127394159835246089580088336542372265776746119601651447614369400398195277696085254510788385366540445229412811732378793656397252181474701716462450304940890214887021753945400652423729600427455684035419477235334439986667529512498706486503943333688988419114039924292668989810386424934450175304244696090386316193143518367030841594222477210149755176978673728807040529782019315875389768067727396617402842101154814650035333029078653715094609788688245898318951125645622827534356344836858636730761641692429685750974122136033850886667968747164798363101989049818803984499343954678789842741360935540045199635314553589849665728764158884284726449339006267494677238095233211815133608432126971219882782010503805284486480870651466196616625193238642814127397783843907826254213124066404565214985098617090647564316101974529318929440187833208211145311176089622813996547411737489999366934666306137992499620819233267947269601277298952591891993409276585944081361493986111841370354008428925191762970657985393915272130094697270964536187404313025028263848724047647797827563406324472594860986515947597583278385992985678794403458467540916698715229012013614286726214297845855272647667042868672629326951020205738268814869050919229858650698465272637360153155060853971499928897759191617872921185565544064757221837862697019293012917906970371305045677449951082897972101854664759959746850223477263736988443078355947667345895968397714971479166818743803085740183706586628996430228807856585861274542969882521273584280213604781176989846739878145855121549581456788143718645729352352043554859973541277195898363287650526645091656025266038249074401428850247028113249264128543295611950417783304607090570685064648697424646582994000804639604188054460458187963653231187100866335835086192881187353708762111432153243413555486687509462045207248329395292683963508992032057922139713283408413122843143206942434171691823203494372950938152005329238650177666354169563865497717703132787831638034709915841384083992564355622871698748442529594682407884623983860291424093607716190034388553009874541537978289461434344008111521657928034141066143710449306531031190853065982031439445934322523637773581717884260744853063443373266567994436389657765290792671343381334335610490679265879369900565641409630733137683212045503690853213899207463967598646926556825556347792754591228072768138678765359349384737250355944952534042220306680515170310860894109083687962317268577535804607284684925182978814151886261343357032560134934115263688958737280221664689170239748669642378295907097532679326147627988713895601491298393410386685043625636832206087921502155801300983967441704863290987634291429858110863837967553288592585307907305987816937936250695140246591250031176936038285396097674364007748511804019693898273845301040953675088129886268757291196937886948685120777049543922990791196230035122762442572132049455285411672262131470723823926750711412480340118179798050776822428751445134893061844071872956803067330898227130833816778760043670977942519844020908793974826841197078911640537386208557718569224770596236927760062335591653032046833504312492928762918046538450166203017589196090510722274974294784689031290785302572468985681554358447306007012214561059050526530935429523696190922083977145851713971308422692167488091589867417285155152405782311430126500062280380908804631571147672870765818349089009341310819754566443986849064208415495520839083198704295206459402407160006852377469841662795846461222832122637444565551397301808489938070709125095066361607211947441285914601312454383114355665540496282350717736158801628763805112089306051231456838273919361480576211984316674792215319577102310078724404804192508275396921736113090961615497958039088438132812933410628028753091773893162541296255030469220896745445613057290706624954381249682028789624763254856238332480427051841790998554890818244124475254863108097025648856591155122612413358157741095540506791688726990709660340138605721705608100534335408359729530502282285854113883778820626771352864473491407877648593155149509685463678319971950982155659665820345850240470641327858743890688903505723946511251563052293915778026304281790699898847410306657730550744836576241368035274284092509799246868921443536849597961159836251521093336381629615584452002876952995053266592704279202011804544985815624521265629833204534352682760177250185398107276418909785962106257217527179570250628272696778145528650841513174261846003146085802234980734320775504407335229220195863406047117334789852801930733715964667468350402185100901354196461079632807415723456011429655828729361299357961405005019778465937175953087916443773473658980692730558357970966287863819778121758737741662644019636794261970451275203783854087131157228071931078578180857335739865162678719161795821306894273398699789603964510230438180328887843622285009074837566156909042900854897694187728854470640838147940645964041647367239868767650912838568101529220835905107936623966662394895210068778212095984567095745727790928102395318373172638277835313012135511541580692393633702068318142238723583660775440428402735226531435043795761723761243808411108108977500994621022906264353734853417791953526846098488817854571395623370989654661783479877789077132464325648789860463306938365698856318509870904871153036826710526813037625144546318842111326248172141375268165595647160543877908546577081135774654905608978158738783686113247578546408880408068620599019131327371378154518205435967708111562997746014197773568160365459298016337224447189988468709901425153122365427901015937578229997703521950231653805181093161325408143079423647098282285941228632669085465144541915993164711252146232902073232780473287772071146309582681808103736492630165064777027832622756805831556692365916317338439672896976280829969002234798637876470408934480652746921595837901182856713347039399553971831283264585028576304901542007011095134095508240402690002279509555873371507247266707972401550189438830234244874463302832982212094069845366629835278399642253985883400070115537094901072608499347470555233411565473431997859520317858328552675317141227249960885631269971066516260028962997069574094308757945384501650640012798639219708598647223149898365203672538623207914140676557571829074765379105979705237167665448469529913759113975753413746846870405298695147982754817629703421833833692261469951577016613178764746198087255556355637709732835602425634433113878415891861114348336135520280656996745854202758658077856339653365186065777171763759329476425221709518541807218358413974968470000382738136656930571368810231277276453173900768768110920677512539868625513773791989239736812690843508302026911596831926504662757519233741071722799104533625856981522246653587001260937937572795653106639817913175310376769329952795077669769450815366030652703602753892160848604165309934709754085882416822007438837807367824458938402492437808599436567990620528451900746809576922484979539008346170287567649634204941485731121020030571675056978252148978930248379460097628240973631343605808530593540778152642722545644065888559984096201239447783644706501971129756265147716086801981829000758412159896178106867727781480679402724917142203908381197412008417722779800559163123402750968239508480675984143394138372398650960820750788832671947771047778570890938575655252112389305998722813610506187669840906978032415912074836819530104958867555138283050339356368719907301472961910661668004488187294887341822346614396845133770913356917251871771119773993145630954719915989529178240227022246490406373928160440202936479402876215284499060869649683964720287958720714310444676296020480478130207788939134683098190908158014585553567607527162783508526920199156159686506518547571532299588981480622478381303593634882477196427424442544242952583661053190440068310038992177012695599141542773700359727960705665916526260485837401198871922756815069168864675027569740503524647271021860725058037397251073179982651313929845663685793977314216175622564632752467180408898686235828465574272133149888389761127281774527136629688405123194579963123739018458227217447597666716851407801710728915891438986072364087666560303131126460159103673825549893363576261966893581585137997131667778881850630632780887618948570294046569858708602196905152703466911288505521017813234031752999557749766760780514380505835668175780349437373089136926448024911014024414511890523121147295714459409283660935835253930238338312148508146655068482273480251816512457469251617559373612503621276930035443418425317544244566686413434672281096242363290464377508156310145235223298080694537778715146518290539392674514010861372829332134165027587589936463736154604389066041661314359446857226272980025089532089406422701316442106151293601287883051714155165478556647923344853407993932799001197268753201374671232120669103791902684366726077475449646065093880921716246648221840519571058783973344427161539094458892442275855688913121352445588052119609535132107134761597007535131508352037173492855220928265342066864067429291164593772773104719364746295709194960046732460440397375915175708073002803807275735367319384200183170013004431073339948651218650367795024990209700568152650488997074849006635363066716376608234184766711324553143772636612088286246358967590558526526346834713507179539806811641994569424124370606269356710430919969539815085174692539683766011996072167941584202429625135756086394461416689225236883578799597332547981029017651705470225304554966145666096170770249418965538092810014028589439704615497242731167142634589837912299374348038118750136003185105458487671568680441894727218172582030500398118328541561576181236948123266658011827599710632675816481573764593729894171588894976744827377719605050315085746183032256301921223868294256752139443018596668336898460799989301274748511633307843874113842698310475102130304349812626670766158832581744696270537237479810462531545150024632611058568174585735117944230886234572612648352927141552448529703280640470355749003507944061195759956456864961138883847790168863169524474085105489466780637424839221926144619478899163706028639113842539879110319516170271386889576566230241966849321961395002063686935552694076408346164758040111860715776470842210074759950677141500706311059535562477829523562417426173854284278148099367837126904410796780344783319719274576167413067870765780022962006075120241458207199499747742287260656727997262907739989377367352662643964444499217245714250016707047706300471245821125573467590405862226321117643312671363227869942796740516927045630982877738199501765078729609354055261377688803521487523588516144996426909491102475391270100914842472381358059701351136650566726110090791041044355671768400664969535621676552582430322398910377068958571710271765054459797206398308103268762259003130270065677522473964133328104704750482227822673712328708266842408154061663424251882389174386831702877109405201964039435789234310916389453924797753206971413489593725144323333884919000536752144621335846607345231584248445279647938876660557537889595474138571890596447322846805111274654041087439282197694218727884244294067351136760321387867402976294851374916227695536736570088143556638044187502662111917564819733186095102065271948621277988920110006857793913997011127932240534445050508359897489303619254349570975722672562859693274807010727904196123054914600857289523893588789842834882553970575476793895543899266361865056420262594589776986250983661522327604424224929672181535649772016023002317187650363109357573130456602604882053209689224368395026115783001523912514131838173870100410639789304135147622745923179892291849270515380616560071680270545049915394588803525245211914763922652787955027198214699475161174571193814447257901208591884789173820471264473173263468433924172610383723861272465802764064796348039124544189089106140216712445852819143676078563037601479790682007360853720993383520963791070710607020149986023837627202712849388361421594275203433472739337548507044864546851467448592085292830873209822657897587453688875619363942546175251367857885654700571117477791099194627607604046762309531427389746367163874992514269469913618990975435419383542196024754298826994648784178992258244860929561342443933062684932101456387786862100507712461599035177816119029516536067183486032121972125671232668068640346105837186699670523921881746036459219572895804074038435966375801650313532550173835837363877029207201353880134264983784662569070339498806676550150379371272847854962597184662431751870185545177715488554285277196874289433089603227523257060662725204386126863286622636348106147992490480651175146220829534605392598210398531314922680040810294190592522959848508366325283772349749786258351300822268770989215918657373684786486157256910543912675892868668757877518117025347252572992264072841426391684939377154174303087324878800958996968232812592441578966611839381564546608247609142209657236384081900349881967807611254001439631560664887937906095407097026859922479521881477238178907981499479985642595968810165905415466949099474824458107988466199130202667961704144498655730960396886855580289684919261286634326410698458421949152387929084474035263004627469190815336291264596508998299255723565616631872100243595353261151574669327312672549396413053808929483393725357914875062220468646898754873358604855543002727991716324108807820075198284030848568012531294120486903922745062721156088376078303259979865177064210134198212010274599808311285433139566864313339495082498281292318561474840149861363591058186119951346177044294215202691316470144167156818105069436733518358434124810474525889957272136474371857838917932860653520439122472486305256066945108720903542487076090571289186755693108967982164065689046599052104190657332332285787487445892615862615099097692679702155792486780638821553038458941317551139155347530838227780077440250855076683877097595176117551638507737535135343587394914241351328233482244892642907880268249009368301266302043950768688952374689249754617020152042421597299070116918677314828728447015265303054856738179257409913192855584753541395759968349863041058929621201304144071273516936134866427385452736359420985569419846028079934555590116328930340202550784249719606396930217126579966114691110686668599815990381622365019205677085387335937067951127468581751015723402079855039401326105991153107676154474907284318564633606167849428190800761776794877030931586702537250100798767057349824648585483854701984653712165137134693449241335486049173967973508529830017312757510851589621948616095222660917560346204668288109834765239379424670518525396366954635273294503135160446905971218803382616643138065892011264701521308708916460580455167103392951182309479890751697461308173952380287295047128596729164060066934917112031944383182291786033182775369569468449536498502642614499628766925457021487032048374490126217605729003296897811297819687303553519238098119769626540097208580725996042820729505662390490419194822747979527931378244767637999877067145099519274861161522103725465789495034484529088530337833505793152429969454913070739506510510834019220696092442934130204772019754973895798986779748552824028936058206642709350034312222109040207923971540393835409701732747897104750317341650740522312106650314643404373619944295608001873465655381726139557864749312970076505168484252552813318529675488931030370918576594466158666787120684154906176459006337700878864707094701335237252859892502310305289829946034017104225572882209582013825599231969915915324977483515892231482924085512015071324004355856722433017121071767527197628912756777674229869619512605693034897062703264720394161688545321676966438237716015407737778937989133063813530541748155783536155254043975792649373497762358248404785284471910766282518463931234302798260528297587057223098356920729428515324325963411661564796496688649277487844927095217490478282771816700360821867612675597113453131173790125575006223155988257600290321530965084162844523118148326236232454567885369350032035720971247697122937963755790374766898988424035702165787702761123972993358004465110375902160658893562797190889554524447384959707086992761241725253500565204558847217287875019854390947757882948657228287343015966006013457074723006427608724133984038505893795337253265086078824104676764120946933270658141496450404543448187116997690495758965735090897150128133727227678404976436918790021150547899486455469215178971164754969647561442652506470069774098929726623000050402080444038385691232027570409467068654822390294214382573528656035382145673768481926121722903949116333742343298435523433215528375203836771605742491507382222921210391798611901541341740260038157017998698361145337310792377831114491947815368056889146703896548803569564852850149806321240057867768072589430567451168492996685324494836078837130936569540678642136049057941422554833123480273414928425195583002215426624549744904391500597624276861834871953799240301698516730113083760666131685146762861858716168665143484003227637626613034725032616548707726165892549388276664406630058243285011517932329115396850551897554108932082955430437523403142868016895719165900056547765037395640725741066887053739203174500733288800008024032261829288483703169623383850819664153433345097169968766179445405717514465874911105031326574783842780063099797238772710220664477546430576808585723563648215520379249117072560891711362990051968047437042627691952067164754092710585696717549712236616887290440140721858824965513760345092661788727113595657714786116150790433572379501210511680929209657113901933753028897585383887829554113753786974838802847564643202207582860095848325164754009944046199569775235634522713060424629721615918498029059336466631768611905424187195505795371409833083586537338895423492219638311123047536355328239437083181237871404601358082550339667453579167344845533357475459087177418018361841744151304762131889371699017270045965882389298101849727102860253661374730469814181734531146085183858062609664923957631424658635693100160272957433203829344805635096422544398323328852856071275390378696547335582772551949204553364939270535231782443501112491842181170924544062982020583334870396495145295016542991528448731051199243579741850215920027442458567939769674536988440093139252001934451421041952218773377826492546979162673505274649565487768118363094232401332956323319141084143122587845131890398088808268434401004647501556009887752494670943431253275014577611399365899932192095391342893788887944665845424608996892476233630791276140568192052105864201810417923435111984233569260414280580798152296538349102923595269744042402660969317000673615517348624493332012920828483666379742707858002281460445401901639096797937587474873510294251331633811529186737672624726896456280222952708052063245163508040798397331165087270476961141756163970253666818368418830474346870697614031182797242275713093164581830860648151968103220545369300134243406749539684487220977007291553257621258322076401003428657268085739937187533795307721517686980450362300235805826575341448322411689007733258577525110515410332906773970362207388601750343394314200404464107643047766401592448159025726891208230980860069813994382825456007480334633433019053212439941492833942976996046213059890581392536320269154091377423022858353048571401606868662752578387455028317662453490434540135775445648620677055787918341893929611856949153868000709490334673682643593973812746410009817882663293135478135320794935924840884260512736144193799782647197422431017100698530608455745458300814287390436860194038972955196210980955636410427098977148917605975826341516690769918017847528612230258445458317175853189210295221023922652484333621635568633452642411957582296863666360554944111480618736721223222201309092114193191902272472272290184666900291366080961195838811351226350862344284789001122251537880027641795682399873516119340680801268591655418687482002205916176390138599743108789163477476771376513202425221090705471904631348309020688829619013848427237684412227473846627941978768651071901138206670779114200427703359652449686547053468758362349461380916409538691560928833095158078267863216731653032606356261679390455651713716216589413264551470846453363655828572935371032621811252576626348394641628733748202332738793754270456233541246601658348523285761775508054347284587163399896948614348151059901742178684229606410480739485620195952256195182956595345306047783500345588487207698997396167615641045988960204974497085623262923460978307907723910326047825596427545348279980353177988815927152594814969698697586542529820930212855150846965352136612495182763243846967040324284258211525766848958651919335489218658377131308569691428942847103239324459727440038514214980108810367810173486236907529496514263164738978341733898387807396022851977154639675434480519704226610604596362977657267238518687086652729560352347632741712142138911942348654051026074489766738258420042968573777017221780421748608645159860278601561117648170594536986222702387711431925530767937953932388886336013298962075353769233692648653419117893923950441207152591959841489734041309801045468969443706219061720351678142521691830595036365045398875558568539182541654293441282838649732909526762357640160033316592430089783176132228404651045059800278564357062370549716072686648704071934336436173779951615479733648019063620780338426339507011501714551785063708096898646430063602145219867202065930229183494188754299893417651299980674929421534837367320356272838407731802805496840714678333615174717268762351177254913193653660726590500185352888348407749460541469415140208996200205903358386977273276458949801698877079108111050461847143371482791490646835912174310620186417987898937111620320470125391856397712080842025067311661098323965868907521362555158100662673153344859816095397851904772588339979597123303426253544343348206644499434654347970768572602938711403239215583902293669975378431051724490105581633991079768819915243430963491442299323684465878192476876018436294824249649025935517097313851892988994948812039339034271393547724060770903719020689580036886043188148767306425179329697865384320733704078676490527345857573599994987488175301657640475320181582887134686734111554967891164356863479483970477101790868328788171655845091790520376772116968932870253592499749521323709193929648853600357424792967280726109980774598029634938639298464215540608812432510210546789974533988649503414651815754730334804177986511570119371037348396689061765850393531274247605826679531071760808621751274853426007350435217989903062577982243892681098935876536673788675944455325713498676605977383838068476764701711507276397842719816187410508115992695105149894743962378694757266308287887793747466795807293888679199652136819074523324833344120670054286776164718855442355241855373691929247413663261618161441221537742262022516376494622768061250227984981119486683105746625438191147967922793614464497962565321633728244662741480508298683152857222257434779012420713015011925210560896015291314674187202859741898613157151759277959844405110977747059405392576131576733272711043176900610380023128533085391845528165574101061187494085532030013185798909305733151847674078074659894443852655940238476844439760953597723675699561197582074594097228424734131388417742020560242555778370063466609660812127744410826471901688395603579707566105638692054279652699075100414790942745838848260111137723133512609192017471003099158360684179816358719393754867213926768756578173878544645247151773968374396780149972426356479712281577971822766669969496346471222834246720059958252636108954219742881282299062675104638727016794229931487505597892693269407055334232586238954994355754911829045085203630624577483488145306605673989915802677681384837914895723286785742841521061813485249422993637402376631713009815209055713970672278692298312401200441764598383691621863420449274107848798229253160586188772508078556108666566352681746132520548230708241927899489317711411257643373312415555034092949451579275419891120922730638483778581713515447410369364857021717996696092112953234985704034478033460846597067359489340967367389545347574768382499880618893331789879517102108998373153928087960157220940253569383111592355403569357906040304617816682864049614490678586961189028366735038247909742441077573833772165215984332037279888213032943427969251367146279685032333564740492857059487734074183101411881625596483271087009269167293887148641633311589865975696745734579149463786768235365586035295237282606887417697417401684735189952316640243568076109308684489800630833789037635603534075735671367957327015226944292418809080442954281066157612062549665808155217626945870167825647832717465635751242406123381923092699090076979028233785615369031326538949707081685252472844359378026095486084805143273965956366462001459065015092979234955670840904152041493913931385976351000143018519702693065368894237526428768257820896090560836613348250390180582332733164923251810618173772393316002792088606952877760791418312702293049941736670110102135168407702369972668880069144449001043386846518860629344711326173646026644706923406736924652274861981477441140756478999793995529990496597146139831954209555460760206005427059434922235386484619702808285168610979871071149126180288306815977899458023727469158874250665832777045086155506023462886659508810671851949595959125440119129335920586651440179942913319487034232736716049203071281273590270921712599324755669417358140823709787927871390779132848149458099622276496098990384676031263619037593700063214721959336645829316029882403750712406560728534114959544556611589219329521043679828054259203957846709070836738926968403728474455199352944276326582806273837944425517299990944615803661186017559304734312427663734613175927198242296416125148370294980618906010083268951285922623763531190037223518601155090565879621696830738175804598786522495713494700339738818377611017187912267969713210948104640354409383461033339597333404634323963243165821147158784810126373302137389323149458451063859129582296464182600477028562438961361190142695651798632555724020898709199966625379152565616990187252543958918281337063241028933107794175225451619355782173706501044396179471636678934179529099636070000695042750352345386086670040736818952942865383102417905750804619395100930920087486902967417190892252417059411696326687633681323365725608472849408862802717316173475675857733484084308912521808326899410634229992548890923010355240173917995257799257475656701052868479394040005750367211665549009822591480493776506007684609197330672228950801013922562588420787604708063315850353225798619039885343201370215012158942385330578732333284057184374766253972982216957103190970502346739562346602977513479958129498494612707210261961452220040884349085222475996050367489233674441020454959096224005675338268411246258222816603584136379120142552430194233511138900081530988456833861804126651686577015737486922856092519286000363670642476444231907186859367693130627140252557078753013315112430346029713082151311090606182605172908335452850556965459312073932696709080775638645503042703816634329828276877122759192872655808692255966946799596378018298026554118806564701985293279894902519631895806375221277783957138710671280555979309638769016053724885263501450980309090856144370788264892865754439078741853218792829215492421379891737003964433515715615495181534573238930677713863270173646915262353790458721272241366136624654289354544934388415032340739232459911758397794337647969616432145625441335676613048601410436821501350977597876655087620116752426981825194721070305786297975271977769168145183204075263748064160279297184992192154491294062241900655345212923375509079690463926802403826587434077954754591733916963213058738781529648984590505644358877912035735479202390534306635574828699910422691734582248809648541651697501239204240916976648998915242787390050566250502433836909875570949714375775494557255766549447814130243025351792347229014699943772161743257636827443156709690889199611114523192988860132157975547777693247916060238842099945204307809396660190938365317621452997663427123194815182347024133089063670454033557723815987066151330618010985084479418167630672306253370040673964711484326950983286184561493316617220193090204141671209178584412694360425568237096084083887993031294994841212574166649927748662241407836108584208071470898635387546502620847087261267867256864985741325467789217889778287059582935715816055713931931771108311003553493041426371411890611961771029370096337625347660840576865978928429298497816950591319457844029210797187930702405161764529313270281830093500527832773136996124777903309130809096699976954918797269907042252877153251707329564946075085149153446429016376804177557276167755814133753303154900149165181630150086763119175503769942146072716016489213153510841596617534569847997489711244779192803780862578603270290613965413881321648026352295634126468538189536826500053007339666143419250147514333789119267650032109465376801466674231719503900163911540104864680258579399002479186681644696627047391816116071124613934197283914916065477610994871753580605901139038517175945727176021245237337984089719076967638545793934959304983461607514666705423465440856249562216529984564326944721901523972491115777747021360345442571529151310781879581288802942900236176360008246762506270134995449838405536342158766068919236181027937548274330564064984756384143677885087111262725451043853337383821237970678884008832232251944967520923469091983544860204223377948682472846030132745724803234246409134004413939430371376937697421919262393132282333319348564449061707060777321001425424402380965891373550117720345256471220331838659788083150937467403446316356504011585859016984133251645760079671036831083865941784289208980971932634020486837836897457447333691031336318509778551007953374178207329205781082266971055746387391739625301459463801269902974447019163652448721751168743314232526683588811632914228903177415634076803374449932576750028886167289918250269700746681720443455268254303675838801662631152768650291014716140772063373260679419068506646381662365691525218630658026274203359988292359550701394835300595579127656244951177863108489960006414534109570189751040496461656420221356199346717292510884388366157484647007961805446809821587864600026358228270716575669173128500973695080438904824754547317287954308719919288335583736651320481687881801498284136202026311594884819834100034672476232694567411665124379579688133342241465958023998307713603588046073592399090176830470725279848255612771397380615100618737178397106574475082446452182795210684075636716915218006370984272387668423001702455623037652359045135717321597656056564535467028668881392605072041986974827353675894238014788169322235001792439325633856968980234617894487852190902065202641164022897241826396037868530043362233615934611835995094010264236790637621643781809536958536101356625871937929607843488917076706772265572091295039766582150351316334627155524158405699957465990535283723481606365310640154814573853488629050504897317700842546252684164835014666021149393469995106837768410217321250834186674881277937793125187135756618315855819392959347232926126262740249149680534706330318394940812248924371280911764518705755137941256625860328908200132407930657156287956847014125611986805720354798229233827781033932299761147029930913044563799100272840813584935740766795992872879493557688630924419892428766461782768937878352856280279021697084665077167905286083532485000344374465240540195260609154940941761024932868854651371672002832939345909003395064989141767528411440006737704165461896527780375043363576759719108017724451470769497668183936219015087250154832169278540212626144371015936853851550008470857825011452823603674605821556345768621877730946583172958358590490460502699288129156556834638063012448669096602665935453434707328813584070669221204891434237108101800282688905928201314865386298610566117076661004784354250262153498954489764349480578298660836934993094100900068701743495477047168293307943002961129954839471192805384794404801424101141265698889944055430978481412748624790190951017650722470639702017606107760530061188000577765669087383740897077180877160014915069540754669281264947943330878011558214869941010717663399342282741390132732167866540497555985649108985901356347971065800546507382769237966044359564988943233654152204852822433987761610949487326901704992809780083825965885651331940170092610713640628148798455617046459257718467997782821724044468520473122698308547152023395120534442478497976399469555585254926749274716781077689530760915762927922245249024712973775699402668545969692828306094773754275159648010606316768312868905512990767724420539840364352990590380076629507050106452688610160558111504383288190368818461596598467866554257912880487091150821522845068388497632144672986165500944124861778864328711802053964220603898621959705129937116448276067937920911746583284910984217251378738629810355840942663651109418068588149978759913135424443461912379319584923758816442372461321381375894923857780917193365109991778465414838370027771487258372864719573543870367598887446122942993636209143939717066915024332444242954596128269947567777691236431339757898520979701630553860332997394565917113815665714977883891927964632697287730089608491443976287753173237429284917333497099454931631945184025409357778699769781923636505211788101705341812948914871275908589767366150738758971503074212107088029087277607643171829416084815863418756673578123902379303268979708683231147163932184801145217946641104052512761236672284310587030434159220647546510254531857717786999127521730017275869168904261533243080219017611220052801551402222380062822557982360625284486984893528829301315642785600426370411854958140027052465230849094741081041920905447216465977576308866633643591108699583970891273335714498156573966338153737108569641898584998964353060599400150939176020621750073080706873934812337638069626058926551958151689133364618327207732132423717506436707682515113627973784488673603858092806211743589812289590401323780608341175663411401751212730200110388690641258181073434862223888282303582492737275018253885031452560689914856932563350342487489151179523510474031076890303757982171713757877445594467293184020856888385891804767795538615693474640699508183473044297205247733031853609751458417823732942079541616425567070534483204739014890133455013409929717273322661919898373365363700017215954541955801913454748887524824300789492449529186779916155531829303913743743416106254775562101294555909677342753142281023106779525065453338985980701935236057993734373876321499179225655636067023947478628829579789132523472174312697813620547673358762746932053087991451470584141833649408882188938719990179777562701258609080273910207924394872270739856053725335877190887367748996035520582827185068817385849642552920125313584100653863871291655268788462918188085687436983698214868623000167509020643876768271422284593028368700641141313426039976048947098202556305398033950212548027102901202244797587967966316063651350746779307525654015025392310927839845454677305764678747330039316229044148491198861443764662934424322094803632610479277668667339093739260093305509476737505346804819408113446127911931146903774332107487945917780528115915256411772888709894264662858950209189473905329050784745048004162256448117380038792596414964700563105864999382439118273145656309258117989076394838942409361826085829471890252254851088327612523382049460034023397186498236088760643763993466001684216707587149446312903468076340547992000166293248725401639811155226096624673420903177821013636410580205783868602763557774732561864179323959718097182029213858309568225234870337164037196358411943210381478180960399282519464626372115179234060308748483041678699768346433385003010442981440868438163294556378736543880061101721386455946278671028344169042041876923118652640212056900089974005549037251445687095324014110043033125077067401584544562346974533577430850532292152800895194349932867374754945107774479015940704106625784644571249115540342793790998613977267790388111655581032844638182912173376138360004428096278458521979435731432363809873030025192446313210025409249570688954998419931598403169729212948830288729812353340569989273900402453572173813745654833920866451818067197423716364362555812150851567040641209377911989058609936060519729893045137163479240042151830842582365940706824458250331831114659586059152853452810575442220330338431452925990836622860418629977400455148146691066471657075047179803560480651523791077643439279034375491776028236963345998205914395099344819471413542399520871341278182772306877796518416351199875651780352913962776651086401695997911344749946291772200142563239645795648534507716812129650705638380181951801799936679908005072682102503159445396915340778142043398184307275318564979084693953790466621242971640975860256090465090142027389828991350587107938072359288284132685677225649391750876880466283784710552444725695975961125269801421168019379699501118300815596276954204495068008486698203008235097975927126707449595430621900831377462425000372832168336245289436154495728598223805734198988197275143414746167669511345348133506870907537198006394274088481060796823781270373635521133526420425657091423722516660755116116171272907246339926237942311800844746019701238944999480476767427480073585157503444954644751542234390373613423604332758339526811943005732360492088477752400377997534100173258802781767590312619808236135329915661726758962045052372582618530870087603050700853682875936562036575379723958014339753615080007155136273073363211432708218894058648502613314869603688783337780255911244036152556144301343210076140618299072024381598274731394983454942786413564070546015440280219620609429472206863126800000373055559639409104778734054248461787537303473115336820224600718081531418037999703225295422796669573575335800570770169450028437798144612393269536658849161731969132175596193912236462038256223784048988234547401736388012252819526717292332464358005571598350288228996063867000617698620901588986147133532342250304580148346739328677758966322133203821988422413902674497750493194750019236720266075981155307962113652041704112927281543015116923048242851557642993689679770696822155232755767832990235622933011606957404207971238201220706375635255594211278486315773960416081762922122791553990231802165679015941177371124686005765106163741616167433134574322523140175571922916491507532118991746512004742352709873475300747207350691612595723403744147197317240891878184485728002326565686354971488628939469057756157632238359893323266170407982444869853959603128867414976403067100764029820357120232589739875210314239930347830378938084806741142843720310976271779011023352510150031692569160469825103921333132992101744473626774442673649689210588345188769392886588266832143118557849425278609822849219211620889619521577719314185352909713400216944919854715108378656706851376682091807912073166442442833462678052396836131636683028123910510431373069436262530814363519442452093288021397731096361435966487860599658317602029267091521078630176481400790141660837044118876666118504336407557353110058495257546238469419105869885007578329673078705095982833838480702005868025088607879432960984820875444682537278501857678985350382390069105275048792983831399150401101963591920279706435271743588635325646614430021996345537716794639176126481810435263834556722327620511426106405202330295523740952786486740068273563581808731328985323517161879411657779711544902550902562900959834025978615603957236122076858717532643704645353915944587248656865174613039884629571608763680981595930900835196053029648073347921586673726297280511485909651880775643770806819413140387425575333427604214400552452766453776818281733297438611850961735851998905154097147863259406262106992581406076589195580994481924381771416647035589288269994134077284946240539935477609954621757736408921630048424114142935593975134379670353224638163488320010862084479137466123464671241647477562820675048818968398482715807392690362604785825740348330466496800588037687963074594778034206395204732952409168343332385713771458046941427766481097013105938897756936954801038076777319390453690253451649931294000675211592210299330722520073933448459955205210169330840145665015447104150902522427827438353389192072294326050023253018469134215290639270186358499116497812298029519162736868808151702754775298433599193220947872488608202225431663855556975805934156805765622206156411361328355728042294019268116467675456954650149231820420063967053504444992335316483664717552310459252472384583836149378780277600456988754786631389302733162279729505128802651543932038925147614449163265722232450921462270577884174555783940150590785424373103842785486031730926799508826444136494898691511415267626670336536881713190242416758980375552503609735374009033071894232054983520576944854392669933317875782880067961231717647704141798391747272432869552967799067095094689021265304223638700909140604293879758076502736837963171760174906794624249115388991940371562913718850540687685879952772042044176229280985760252649774294237066028633684355136586069900110004302114835986477715696060617556584960104973389581191750030016382156845980438975731626667489194138523885285051184851341210530112627765308319391503277447504566680680656035773601626109897368211665706486369642856266029863456204679946734132150754056989596264577647191122340133974382632037673371628938058142850882729915067778122009124923172275910761602386295939718410722463293371993196494881470187475031298685344344196332746956295624216614010571248604859305346632087280382141247972219797850428004992171217965875008356165840587638566652006485076311779455833090758070393850911564387559366524137126511305181425441593379885844590883846147233598134692068621366828885455982582265464263289662041933550896906297271185615980947446152091077048352959473707694533507609312448780298395436740967722558545980675738380760874743970056853765916530640386286633139692769899967141699648282220006205444080299223211284007176362209521276460029201728265635313345212459067852282660615010518562841634786846696577689276934569357366035445675632487775689919786441998247000911769708643826813782379203756555610215049926970063805119776695099640675040906879139201726466841185638465496793370818370379029198024243455816400959416226289780095416121705475496021006875455313522210465806994221242178095786549275987980433021725854954047544368173296497608263149501071001217030488109183370330583347885224739564926349450505668719330320669982952159382661063354671591024210783024469499916815044168966809195017503444057319426923313399392626020260396960227742319606361939131362785978393759146418370503564099032136332741196531521366423763813760711383890703529957190208776491268823119285574742574265261130414294684898299477821434645304769257325221351552854595328668967627365460161869517601812730961665085440525817720403843187474655269390478108779314064301891917456606081644439630613930907501205607327438937089879680860004609782657518257345844801440877202670403118016741694470073168962719067805235566648234755458602045281708030043718536612135855346531460592261514926167536833099489360305122633448696963948151021843516260279566208728086370204277719266049731590941572632235658298322018094479748529805004110059762666552578285353831427303859568278172988343748498301469880773650957595820533685141563367144495467087138708840449985460582046200614615810566180504303879515914323048371087969634713803794902593177713307157265302612028545482254701851856606572100586813018452541711899898123351384932830442241974231527711408028192787177813398950661756257117611709150134198008233651886042996875734337255336500932887079017485354921939227149980720697184895976264867008051114430319066188923262993806957416675065845969003021053848885891607146749570715623866479954015407747038163567891604898057814604309266092794967835545599374727846576842731697228011306761923024553686065605840082434609685142154024657140020821138382657961063692071083264036328321729114019889273422879060113609548772954399302656094170970503323941068055978013191550524103937609077009985578300920749766702907092425257399042730305398451852733564587964299559016895006387185837670882864842958798446991503818756400763509984872632550555102848905159058398045281880199017429617340434192454607705416688433257206783935617973304496018651449399391525799366276369680124599296674502868788225829981253929363694060810306216269115296387539532624851032570773528515457927072020833925016585555102399301244117858670920799280971441725713606656295818677909331750100149928934269466582790646992939047856200819690704288629954935870705552471834958409060297788490685407077110144948294813169769762459022011745387728091622124081017417164579930807600158755007944283100640147903858474555398581491554643509761501852986791753174079826620497247792802854761836457139348469657625000259064073534900511116871898965260702810415421320825661874223529013501247876481213398976339729351736226348072205748970811978005046589962395471834043243998504971806216199984274910082693369166180123692081265106541692782005677667102938392813009204959078061187919238225284341440373370075011393543760206341024330706563126473865785655458135284092773408651536672475265654880734690001519644979444549626179223663981666289861083328454872053143571892205445051236884724152665071665997710533998362803236352789860090431362314889060202478380817621588109611938019154593950375584726744797574293827591026713645598250841019243826976683290600132386467018053285532567881380256021907348524003558117822373387815764957297774907403860335971078893412115180850449581593528294741307953188080976067467881584405139045168822139073170658307593552674232380266528110325814289717782184860630879649147743218731305371057044360419489969469853553741163892457746931440465429288855050238712362378713153481187800931124300385392164121259423221402168841507353243816218503951329576276799335007437105696361430149305202225563202129847998681399416448545776573011410099879722966192634924037185485351669522739136820957946764386903206772659292116183445716756223437596426087467416582673633668347571572871869495254200683005797759122290134810772989684906786545880088794035589892194528657225103188342050565336696080223626981470810119356075106270486754254200573933976770244055792937334787126457860937540951141901031374294930163113653781844152798832672379037144585133291043160426430758794108854362736575672663224170336345916288576704456603653462131207031276857016851995142702780346087244005984135461033440199386513939029745495443737799030353371029384449744599970413023451887395726261938726178231625299515371643088755402495277404460593738623371274035932852692938595307011147113148631792865021743728814486691734207796705538316894371692359255967067135031661933430573038565340535256719774074538371640611614420186079265273626198524537733472767275377323843948607816483832715973347189350307978369518342487452495769455319164380217955358246742246612013521139909213788272605757942712473089253384561466625556775642661824193459619464589953406092274244818553237351102989709592554732251322949781785742453341635306061538030078964758216604685870456563720973084396628016030674817162551268344454521782815486021332257338136218150205650361668420882870526383514503156294117810918600300669450664599228713624303126441909950540225548650058196573002758620595884947794548636402963631988353265278123040383313183541150032556912527159838960758673135683665349188671156374480418426172147749320449174018098964214504511230177269171906599884643151634467966734048763708098179224193791421624401214680535602124705516827328862690393497077833130690508621860105750648205580722080467571413604178786619480745377618632030880884264475134273273164279112838127551781324058742739878129453388907618187440289333228253985175639205430768021237930245389871659750840836929324125020159048229093496277070623011368961794475620032767454394438886885501255142249812184705817263905606353398639484459402666550178569207036339186953306559436608810105864197055544697105372259334126748279907647670073350844788151043503995209953723335316816749954867931761635059375986584813391571697347179754459096467059250949319713575413779341735500331968426431183959274171779689653499409153601889062177590976780156306154045730054480244789523866376024850426220986692186288256094022314071655782624488754452298360869672005404403687304618641075459820071983701299155197472388306412067664169399186917701301225499369702444671240329644376646640953121240680562777627552960388822134942640686161408782359905452134773697872253162370139936212716282576301015122701669416598472014652007284817614165100163209744784659203513791331731161333931257196060884989092052517330146776841106227543079115484641997515542420614670053513408559239311119567738446939009518575444120566535935522632125774332070729066231154206470845957108496218340910340978895199465553162120125832741641653101106249017213188960956323719370414052290730539941219385469645636850898780542479601417475681602981553970695551265584659001809412616579352023178185662543298233293056294209758225639195702758559708896300978376094046668805388192103259485372571280677581661791751059409351540733075678289958288799346451538942590521989179909906485971174096899675789225550362541138755529590908072176256234460529035997599837512022016877773105561231210003952914207068875421500573166841366470869978130068523622605631133817021883045544902968439198962510563885075092508443594647498615136632170272401507486669140540141315497347987695498467480864345040705063754882205445263737898828053471313368978287032649033957430710895533228808946907386243427667313744023578858925915687195010116654239490445107311045527529987903697061763694727510334800340600986424946524655562106079455051689423515822139118583584603889202788665408495044539467109845355057576559518818783453768938974807761089643490173241176310458367134475056673390126443802170173576628600661364484263002134702732252858781280409050314812872603362785585398276598436204438633247449419045649507445610946210708054297229831276444778184917434946422326068626962967878695181120525125437147812150648154580585867981800069574235339963482187808896481523330906831696972600940847249954107068146888718138212012061339308553634787008741627220602503873524568596159854818954975134517899730431209013088765999758075232574984791192468270354512060901389266048444094693150108879654562122249148366017277131921188600665196819414839943665103474682244441719964285325921825439725958297789616721730231246024065127339261248390222225664954147419934672115098209328137115723825551444132786651441189152728265049275479567930494093724620427118327450258630054495250039625797539088169980104068807850678549414649881858872614005844764611092562567724526124534194192319071630292117212578151510679149202543541583791970547930913171137788437911016104928715991267434060090130876662643238723609508354269254333888170596468341388080252036955780147118969457108273710804830202133963555633075722117183451382395391860938238926964858938856364979346644560080903095709512843934235121024088060890195617132357554433443564515275119890875352256979370495673655073445493741521769829361394430065947971378520231232651349762999355960118745998548374540736857757456410802963566741294280985001772310189103305617734684826616741146745721569978723545830537074281581073969138405639802098172884467985109140131488007125074256815514040395281970762532045472769975262921424220180817831143019768087838010289329360323988458249249571118509320090706911793400225190153246589689789786503598677618806025688759588405468460528431105232699246970608357081739573995357365301425499409488843631228950945553405006523629313449184215392127397937638339168407889429438092295014207917929418388498958596823181484213637508960999266103850899553559778880068629668427845682740930632704149410666669808399665820988291861461551932007700551946510874627294260927143077133844040676849671358048571706710298081044607992123068464525731374161474660158472204579687441312945386299520530744510172798766702816135567517562393750626443438786427356560841053455539585781968297286392775534379529781921697185714780093333412210085968490415294197753445148577687807181858996420826173558234058521449588727552322637552401265168921269594476836442920251625051282351017654741622913098174149156008590477137107432703384969286780965045513485821069306494142829151002657624300224063573225725531553868363533455233168201634650398797261409048465534999031260638550708138676915065333803208064703122745016533120464673785042898083005263492032897780616580511847050669910286608656031140895668681192346087976393360296850477436333322227705915740239426074200525082300260349709536257562082362720113433015255107710101452434797786202216523452357679419922560932771668539730260255432874196978923521434073861855106932143032472726437039294972648310875324574189534768579828223407066602884461015435513177368562524186581247977162668619221629703811901713022736996190549142982603867835195294102553186382020135662955800492737062073046287665553685834712095661846469813714173076831251511106521401785245256808803041321550527634873817362247640557506063498844638795184400335599423479152140064525342800169171421818548503032422939655254748846126267838891159674034467353341467305347214045143500918677288751826575510560338998239592521732947312935226560472893849782450188490834909288369258514459117610687357704114042372221729835473811902858155288530413856104649195231377371254387827851925105058120277771323257771610970629534375233205912299206610475675506546149263592404332023771564403511743759151113251682340803598639704693406373129709329945903877913507098987965260347507560623873208388623528840665706803052063633611623354684744746405147181817090489619166713135371707731573326672707530355112865438323923673579076917445840601022502976572241613450802158799005255725652310699994205484950488508114106705786598842937981003226971659652482577479434318780899064593958741182827809500176410432616018355498188170247515632473377488702292990106358215766852659017998904304612361096503965457868760361504158430860131661624058613140228809662313232862119792434941064154617643160286170058854058299757888528514706449426341580137687729427091853362293952478610554709917149735793656442175446562806206822387020964584336710269551774299720754132487072043834611872517695108884160216262076675715104417826956608232655920994063738074936288831768501335676911017627552944360027759659209152781587585289649646699736464229394145308706171331506396667093174343986152877206409007473699899766144283020922163907059033065134079469491998388224120626543980950894614951759000394186213586459391054650247150897332247770605052445706178780720093138873761842337012896955460750013016109585925543899920575400340715280850794030071274933141536398972219284919761827110224447507729060433318547147724598867663040682344451637900432249202448416609452898003903203129616055321401903182289839431939769073807391182599890176043645504106160907558414877042360484951904675658929504464579962063904754447010296551890804009900224741515990551172960772441515557781281467183046295309607957788536739571696415142926066070077784826750063923922756045993041249225481980190112256947429205285100758997656037465704166265989641223923802380078803410036822318535720262010762509381027150279519876733651166092856601282096718652333956364700983673134222641073527367567902518482838021541444687524732031971287711103530591743422685494567043411989272745347081815535338375340093264837297378354601678341623980245136165775279530166457607438289066137067361707285328119558165414350860561012481575441955565753384265530621109406910360077188439672248233009400652451601406877251871539349487997772466806921032782174380776616187691289641163408941901010174497830425124865152364579426953169197907949153284726526503410059098687916527024299283497373750239151890618634114676165709251456685400769584225363418838941275970446568158382789179704998434903474830304176190051670877057306163251073575278250799365556752342816061771336920037968739597347908144615950060009018640684623029788652023782038797841889082855212700546472491706198612693016716070311916152483853730569818296890880971723462682136664375628362724185526921575480388539464481069043901850127030341761336903842237633289550887888834142837579463503252559881262838785052146135448162721574472874578885463258268264396171344099023563448047354309664142676407934897064431360322285030778188787255970323616918121052071258268147731226050598648480427960740798569648913083101304342188137123254873971497221653703084061119860881254078189908753406911250435091195242497811610073554865920587119354643767056240608547069740037614530701070307573819577181863956617427529931630052012347590614066777731913936033366382151832469225664673219860493924244186967361060507562270377273105663348650170623750075423830748791494979887163648775860724700497884920015024910530251620331420768957554526536201462784394366334097811797286935451003288371268117393603985656179216730940910097174917760731666960337395009077296650120198803263423699146137535391331428026224792608694916388279707109796351093016353038334211401356384669426277210204498392526150363807598835549477536813748247870687129677799301611312165290130368957139395713507054774188180384931624408454081742027081649312961009374394386989870215524683993218724009121761187550709849272956421053484661290736479694017966799634160955028205593895244450115447237540742938676823988967216674102399001796747621679585443254833529131057802924262414729431114309419421479184691116968251839571182461435554435016002446983534326499277684430284962674606377163269730130557308449488785342619791225672670637315562878207700036832509614416575815506100518138453739266962176186933271423080152435380720304286532046211522334311149330604731607984124238515898640018167681346625266956936932859960154086461641625900298855888519914397442025677308588104103778643031103039515881664939518294244613481821289512408801137907817413514944544576647840512247245481737351362178022179767150544521410115493460214672937268825633525801093676086614563920902182584666061446737800948069543578373422402809906646667489440324991388773529078473576820792462964522361150332767779425543160625605334359272054071714684960844103378180564752492231904799651119852517973848180597809796494409766087319070360807544483458011268084065067565006722228982778039201096727322702535213605623661635795610243829962667050429159360031074582794197404552121690151272820344523199631636100717486587793628599654508391767343906365143502514440859223617725615670615735502323651970237129837926601236528654887640823333443098932013895683021293984798043107283235921380507298386944600936768560724933827532877695109196641342163825765660738698520150864478249768029927258585987331974079008789327161691906300084754676033950352025390261946888080343532093884844435675585584814911375582912192963283090858160403424109771626650789194178395277845665369580491924615229922518616162019730469689215218766809407034487448285139814701124619890863721262973662421081839316551253956161984039544159906041495082777581812951090253170900701949335444019932194819453649333329919153544723181968431537943274642634091148887774835981969784450457016373041403517852820012885337809438678826845391346232238953392401568399814669893679873206638466058346374682036005055070031988347963260621614974673412196638610588814997985049144819396429598614915434700720741906577575640172227452240740326023612572763025343473608821458369009043629040741408735351670323433429063233991796278333291941081306443841248380822347795955754121166357931627260243357439269297838484376117148877706677451104890234188167938267695847274587107047330473136334867256076025260459004570352779973157338275912495201161268323103912178471145950545500383852104623815124968764872728566158249881536846014477784707900599955142150578190785316504186753084732452523247757150147434506172548807746948042297368380115017056535719403550206934573968124088883607978260590701382755882367657554447642568481485810338909940901742709859930517987176235720193680583593641173288691001287872305212197316921276749140020933596009318910499913992788290414700825213568924385754659701805950378061213950224458200021701137825212089584391171765390796965299196381010279251175291808324879063504675451891227679040681398801427271206860575062714915013852923604697826559088712873908211084049524353962768413720171640426117615604583875180116670968193655613383478281988376415541487779085461901173492344295631380016982844313461984026641014343365356818241769753705119168217377438890448885877158650433052400186261713574880901703777953597905732528821999506667942783095896008739860914537449123748333835158696730213136534765687364787998187301432632020780296303170711681172475107761822020441125893683461328135379227893458218317922624284297458774013018661123189714388455271525359024741970586323242685891702668561642762885616616353932147411057940611519657876166147341553247780534280683907726666182655013861380631147820323359178433635786416783419673520043527616889728939066845183721685848121048445663382683025981969399957858636619439382901139872494457859693417424035461798216313579194118363218097735990080450782487715453622191102409176198649207525255823801416538595261306075470508770507398358672376126133369880359539729363295716072299309595571558588165723518823009128211622918642342013464333110236314134620750235744899118221004404663059728026045057737105731215124576075769828540583020370088181708779963229397019222635531237196189967724998772021186377089633947796572008599066593757984417881195491135702235472879115664680994787885416033609898004522711572878299918375216583049437598915264249884046834866668453782571488034825774926047845368487859193960348620019841495401649400472317547880798411120463260793845864303016860041834196104418307724212388694084033125493312597688755481544286461124938952587794556045189921448136293012126410265974607662754016241833887485350477487714342671357234408138935552436900164317775177038894531960873779960406877766821361520475147626416398867866008577091175605818476050919818353666175799345285427937473898667994664501117896326816545125048193028997561177946051468574649229179476154616029566933182735001177315118060595293262779164125010832617475033440975261042364337460942999951039602481934803801913250304038453887419917862548328607308900586636972310951323070844829272119572160805609092860244196706161296448942300608895704243661879064560186408149654165439800078755043385864819540164173080382412198504048034479871448375199771515977501644064834409894435887507427228162798349759421315961781362045730150772800807109356234170410472422694572708748236084730639525165184913889497745146379213561610861102984892836267849708956048198728204824068294997541262259769173232539030942789581571709604082619644982700749179749555477705812770658589677219402207081876329582205484904290294685678091947020761258323290034964636067976091376595035845547942610262824971338382505957614946024138852629606599191286903926473483806705435546329839778005071508227679367387175645333394357535188406428602218305670849978453648288274411292874201478704784492481182925952795033504733411243952225934739210340412005992244026386809106570497907593599847596547207412527215414172671855311220387828131175985283437620047589786103993879613183020536496230449591045632418644449552660662269750593341304684800416976292881665180780316530491237962132194127510697486648902275139902599250853189489354642779810532235851566133952381116946693187855272508912724885034389682342061537458127961386958328890377960659272472585232804622303190885733729071691856472867497819903454549719328200320403347490165038735338443069660646460547513772918500011095410677187045850227674317944404887261126630665797809289803693418432570594100714687993549832637401723000813590303142710332968732247524852708875228777567582363797853668071477439641015329523437060332146555475621753393951792169846393643557845229234687815389708457756221482942168637625461175594529258536848869022056692187899088860002271441401834240788894638812577930124754161152967820548455959602380829442182321172626199790353176888775032817029182893231372131893120140087112527269939739628854913655960240860641062471617761978320465052341241523904889855452678955539031069820707955880104759994134387550041019587018719117674411659587686944589002031374872700172582601131881742190956425238086118976093647657584472867049751368378596261507558396044307085119271997369914099570654215897069637706342355736705047066782561965673997651032610820852236747104268163433820898268777486876209122438616639717578480317601153776255866748015950790258175685237319770884814952572764834645775469087149100990314773240282623433345951681152640831869351400748023960206816611840974982128061377922001003166545157333083689502733471200152761373218721355421914662915247491262346706782879276463115110276971499118848692425732403124626721383720741655561546417787116970663447671526588412171614584240573683261778366151229451149103763929824126931041715209526597409659150717915450684523653767846054586230969005161490459643924765633911893509153567212221062243135802184564495983311806708961094920377377947231303063760428504510730791420721451472907526187389282223246450608282627165463201036833576409899959879075005138628096664766904281812308289685872364834335560778062555402083698257108447381186204533475910218748078982201447244415450453890882968517413742968631443839191505958152847179765524077674786671229269723903796838448851115005297211036515107985481435768458945361112597776941145394970263473074894035972262053570694768944125916650192518775081803588540507340854090966199176678794939784137650698027721568676736657039687424212565832868862023039929982001669610747788233090851099468253845078650923002911443606269978338075505883174081052189584360238386948492383311287174231857438165507018900524868244795112128651739019494529279482276302806185377118039323848078056059730981520275338207034920570311906186666054208044503056600198482505171371455637662755571683618397065490500629131746922361421662100675360311958660581562755863376075239003062141436836472609600610532724874662861345274721258474500692397288271757153584820616158317973564318395321964006276194847081586893815302457696049205578785287021588379284823093286168116724284068600750851467555588724569240768855515464179304471366701118062472743401965387315383583628532097490965508675758149399850370569326394360745482858751189773752388277465331637506943995641591917141984105179667603881499947768918188740452656819488152579147001694210842988135279974531939566361339179392469742130019277462758030024528064152081255009219806422573656860808882142140545277282966057344037995965489190466673930715068191322821815749296868255127539499457318619458386577673753442839525793895519833033324583893282481021344476615435747369721768746986018183518203154680709950401733622322293089371973322982991986732037499848060625183335693907901798617734925325951347586451575264756407087303919317589329642526579479075929356402939047773108497442036928879941957454748618211410938505767055009248994072976666433427371205595021134775911072251197445591112457298228101407246248649529994687958286260553256658185577920424860250818837862739303525136180839734377565016691448583799350298307978338764036880588595564786762137745693167727500639995512126343902258094227921736234787278547262191419392493413502364368053994035385126156914931194470069473454613028726836221794647542950899743938190007297671361661990342454209424357575570982484035158388871186004211199516540063134344282899054638312779032136166136938571158774470811197445252256561192678685632773229314026982448874217365104045987110782317470401028546862623513944443157478283421313226395936470108548614899438378428203629751753710206492119389497213311884759213450048652450666985234192144603509714115906949017358461769265213181669745658186583418323397428042441134659997108274717060300991682499056715938100409018061147764735178084181146796573565067780316131568311215656240205702937849575336339188585577413063111746476637348972031750598653814188911218644513516741844977321501033767854548122872488568689050409345398798997933030072176450482738388328780597571827461205791304421096184975393891847682846929469870098606589067475550164622280463160140566421181338112587257622784274732537180621695820992648311043933260156367903718300555335156564708354835090186997415731392721945899210106792241849220308284495443217093041641022998223067569299356806438465385774998674086669702041776711144751848569395172156520808052075790688934815387438624157030533549820777289408911491098056969583902031840259025910990218672924777198382666857397041131860758231781703505947135550787679793244219690866736001201374946591101752619153198204451744472545062907517896014434957056463202679872396848430409078566389105428168819636392193300552063072836628458716653086989049217534022873410720208701638538566670196796368419979497487282462156043727241989905855799207401367508105319325418041620136867127847977563169207815510432679989700331082248807921786260596608523894028175595655771000619205434265654027377029155626983252228946868436329455820816368324757981451880355877261601030252816298592823203327552503640227320924533555112770124719636877088917746951083352245466574467090473833110279004173126760948374614932202657791130873646538667783496116555196731270783463504392309012838730412735393649108138976859343324124569011278569225447726679369112142940336549581440875563395126819637557851970686505276520120785451606761024617175811975711735261685750515327956432364122592160318360738738549051691026835942956067924728714691174848473019422031151504513895929986212104063774196262653155238352219897062543796438297105771904359135904891083555452993443947553530184411884204799573850546162299616364872707474787072304618634153934653108360374257030491436969606463428587219497597007061601310185424172834582712597084162176193532510930564764756616280525593324915250740287820886494755143049913087291886512007403628609512526759949012227461095759983511471654170320073148790057738726216464987792221847662159820581932811381484244879303164861935227116443196476021437983361763386878171071330653827459874449278757749872428462653652305542476189425034084164910028252958371453075301537354756225814123069328085509592849013508639010660972292222214948173551018393854381770836119132409102736315745050984851750968933091964140050183100048308192101892419370172363558418496129094906181001946597417377712182449428203018149118908493710185557638271323116166154458176296960308171214423582118923276947290921505322042422541298163795427906052343794700258315681316838118379918678553630206063434474651121153711119036208339389365335472141018623302437663658104709054320490189181487339214729826066835837672049688100168408474347489703263501235673127650137912948504894587435037415744638678725164306514003095509145029061174208723701938913556931333725924652312488553146924759556045539908779571271038920369379384399226275809025810057074240882223697618322034007917699963844421114824476140411345590096545302240636377177187020358290303577276552322411454265182323794687185542074942022572266238370649012950413555989200718138365268683487097988644450658655181102491544545655042894667308802486563503778421424153005375584405596513291902302149845732903316701278638793581511177000236705781774659900564257925220959731403438340289827164715993443926003423394689057228702562373943457863087275863650819958255969762610914264517450971690855704016426257358314813664509857741415941316506128290611552276572088864088294053905547171732130263209749414669478625938708017562390064926056124056813410191671060764992770440267519764430639548489279262469728859167482294099806971062488069955917017177878610021596386778571854421530952314677584556101650369463348474437652986953294371782897732886620895393559913536745002378907107397623289330221020008637244254508818159417215831571008758688520134266731034388898776868430480925832465313433176860929624653011076627911512058846327191974265140054931635236810755219406792827757210626548006040197167789900943507990592696506513283997782321381240894429143168541984993168115285260800792413823169371882231051804024841938989833960652897051636467905557095565172761454445790417607331018135829897872568406944853233635371185772392451628592045564519227659306413721480278380881944769468709202961802139865880316717447765494758026725836681096869514455422541531667394878746835641804573829085813263746735476908575580541784339422862041959644795941308244098945400850648489081300388274612469186645875349411184108880263452786303336857661919069281591754354396601781947029122923556800479458515197142415737631078120466021355632883402746280536061536130214727672414352613883760168595497353655129862015548514838676853597174457366553025714435547168860134584506385115302761022384095650567743310346728437202934783107669319111788895980849725588720202551604578515451480175783843594978389555156508646634910071245536780497749735758360995656338768589738669901942679411158287255977963916180304218277847572280864132898230730059819320645099908971587650476165682204322695567194189487114714357543757177010177338378845374547428783436064507954173716820240603308588336862363678877246462282210693590507549209888250214358810775151395795071244868312324031645771302243770983831098326324093837607742513965021413766127093040332255115267166457119589304659292237802161811278512299745584721413077592771482070791136759621503851182734228195584983704927377119805618944043699293996788339209258903008175843923343147510457629824910950407592394366405319350407850063954198864766814533709525103269478298655339522636599821444352862621013335628919927569126285544910236191621081179819957541356303776993632332504216130373677013127080310420452083177106127834192744404709103368691192974925509382905831579762820631682611824464819558558241201740571264016642212709072086295903265781709129936433620146998826074724933660747588736388246708320552535353779752391961756074526759778577727779828634978756728129280688479272960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

40000!  耗时:10s
fact 40000=-722249168151537924055959820482857076598240927135258149413657067181922951401320493931326103054277609834723422706620485901331365755861447829894571891422481475746639532692225750082880018603369311626133578460067065555163107324713545624862150518270324157600701886925306791187354208675018245643384447469791251443260017339965063377353863933727313537507297059575728316031455390044245737922876556578688876724635753122048965736038289586499921568318446179343525808595490333469886844580899197072765577468767907345576357025380152208748274663545676783605874513343817699705464892300741027339858893573210358306384661564960109422027153521263800503739961308740492134428283750546534855830589589761523204109620935393375574835111415810370129813412215837131579711044868725697192569445022260394761251043079550578312456905592369959409948048472396401535306835830964687295433069985416999828564651965103664799775362814366441771634557907634295305472038260486015478574541440133872247071028042910276959366433066403859206218401917559175500580504095513186169956512296952839184738044595950772699301378756707289158837281564451970078719145565173542186418084837251721433941045305947013796641853366309338500048238840677228051241673882295257860676507836620486416981633479180274963086227875129842818425736886311675030785927064959296775197712286445318606464649841391164003837371891294245550310968813085028131853451394679747411908941644382255986814815027972568590648936596979477861170857908675418458289881873376199487630738325900491518654842792790815026025244869552071874209646554326773717252148671616691171796884785903547845433131676289638354004207645460933726800922799048374739937479023544639785453276390362683970931360380241057900645944747022935477076008450834609432970906488012596947882350528152785018108791475765622885186551654597020379564172594416028613281985590748885171143089236990462029646327497497241387650308284123462967004336379649728528037383975099244222970131254007039702488408907671085980928232845322097108280273208828858978647401274309161235555488004008449284818648826511800214926900864840002740673022919028561013023255348632952232463165704719256732999685028558425402452659367890629518325207887301253836533469215861807822254572611054105644393208474867139513934116461471780580862814736115213463928777932127382430496545227635206439836369869762930606101825898402317775724140727697803441154963115795422277863658455008009823691195254092035475191675553833148493047084350518639966528806116866921407790356461590570806146187167157176958391923513534821029317017288759790763781431098169995269698753167437909111774378719548437889365325358711586858295256493643560578509527172068045737925912581507003898214209162548726903852141818494209367753105873200534379660323137339499306905806688415725568051383103103551715709437105636639301823891647389133786429340109091648143731099722699528806593671131402244887533689068152781710032377321743323477721283977941419251508627003318061416943145256870029349053500258752292247334612718677923674621297586916082565473137320398460479994153565871457203144075293732352422437403137096573002687739243967453027670893754062199777971226562877937840262164067962420511734528499378336047303024644851562228065732610437459190898684460609163586772965510271502538991357129813690617906137097280378429923650559747172854392453763211836853673402670928515515738886552895739098481350401343369380592691597992102764820007901750736568702642602378229566867267508494187895885222635855089279434931722791763558837644106785293289334112923022038488179935287039356784821772405381373506999997407608476856683060278903830660634727383556665264211338951653053675877378793551694405276105687103367427840762155357644092459014992845030797597418674169744895093435557023868065978600846288134241697562134972414033990194443942493896766247686466940350159101808378833131107268453104804646462895558797192689717118096998813057339144257741843116019976503405195092028609079630479748396690649140755335151976867368114426246467528396525896207036259044218842967940228256772680449308113941008477901187866993538072873505524798527209440182637607473755749206433786163624178731148420254856938542752994251992067272995482712733554497849051163985000077400625211879847715923954292356559842993797913491102400038193044187513653396477180676756595184331909397945898635496478436495768912709408051661035969307536247752889414853900302108051409069914199343624483284292570908331289854618125553425880191138002049720423872745103244959846111695765121656717175253998422549570654763948795509839953714217133132971510790841568347431185171395612966469361245240590790374251495621279653205629636758169526066581583035980519878789183257531180107946289044193378999460618622308578534301442786371961989101090360698303658113328849495046590390343638656732369658505554900055610964754997160690963120188254398993170192110883514052051509766165129627264279754324239210502401028190764766928746462289354037725396897772621589095648899863623233545390855033739912336684587514260765897562816726636157361393584979638759160598391650223224303427462640897993705075444045725074380327413319786029346956957709289524895258313023447129214208087356901938028973290843078010548657062286238232366290089339056578537324796032273327979909101327522015252157469450217677412675814834450939806902973760386713818392417859088675123566799934435259804435501471187810158729648015964163506388495144079884831120063960411453130231511713625055035981074992867955586141668070781802749658034830576861952334851232176719540895818509099604453016457247078922748106738808320755955704608923690158986972872484522568345375150642538240836828255928913853411848675398706143429118276410247183032120308775788825599687435017960886845337718370581697938240624814162380246792098741035145827839611255293870814285818784102388191688553081300951601276601905887896943428518841109490524012480846564337000031872224233733070986720577711172847466060767336794305997978733322246514427572575576974072720826915172494027039265374355824195862267534579042301154042904785076065350666793866864770569239186209759267430550614763925996155593282510206974229590852428076909111985619870555006864635082168607985958892174298635509355600552023194589963956839516457799873808494114215749438717524924999019474318020400713547050107943240519503391409743530526367930200086689518246588602203525758364936793899816735824545599790328993025247757303150509342101240956727461471519388090496463195117383360097596183628467658837693819134554373599935169392324212828558954882667723380838564213383030732980527120642512118922272877408204720335579455959653407221586736359508164630393389001883375214951211092081402191809804440890485830852025926811159733174309051971087033374110331990399104835969716377173816296835409913720160816842840564604070723766132949283693118864898377258347608484516996524802059938549622627887310193733897322070003652826699130742528972771817067291628792517933314672286978793422721990320487250730706024937849146252100373034565237691331779352033761914311816379876645216599382798675695405056500104029611261712271780989876440038386406546671885978008659019277708345411716524101410913495027481993808248853675973853475697819846377549421148902375730815746826102227620204124862196542281934741956282977970548767678520099185913084152943212065813618113038248179349720337318142314109024853488637265508687499221983695454601007423059967711986002812254045714538739695644911092592271547026996768934168366582225495506479487659631011881914346424526563086493562065780681652251813456643535475095937076765846537246278299888813981725389755975892360537980238252800632945609529084757020371232104083256181102840338585992612727817542392410784094133053140067733849375294902425520265197632585563790162517564385448733305848711611022158635321937100085959297322019715269321389823240626671037604068996290337898081590686004040950351553186591873547855225956957856682585230773695531988282968236501009591897799022824421861282684134747868396522615585475486657468703566263009549515188801343329385552129781323262679512794708081599527305046834840133439871735897785018340758027094608447350231479308080933400002157188809089503754645679977253977087828074873928319877638127657728289858894559646943938877657603751714617834528731774169195223843257682308415935240797779470456486996534706648254483099580056690351007860815394757857529814879669564630066255205088151795750344153148919127555407483935882049379848842797874803291069795007636017650101842037742381225743894165871042119559922232524180154192528371183483525971646664535715619443263111885418467877575653889812662808304119781127621149831152608825246615459240158885945767973214115336042245453472658568351143780219827701306539876313622037357138226138781245834027397679129317285731999785733267220193310898993173837381418014847275874239558584533561573746793615627253528641773128505940932833351498995100573123548778223904259702257609326350632481169862729372854007095956781348679823238550555445830948899588376067539376267352953747196258935262766730479205584593387546414499142900639969462029692714868874684070272485371008795354496850896344275047956017523633649054473572877076378105058660635390194264206529370402178040077422784685647774974962606704878897275150994805264196434121328539860816189476415802961745578466983446349797788046929053968179633687097034197730476589134189195132310311384740526356832573540145149493612101503423996019273259182956737578545095161418101574917346968963672477752998019940512102147053048385366427106009758440272652753647531623271697210728411204252573933036137681926406263062773220950679251926286386124479519341946533303941626924683956465672584897024772685722749272397167177857426754610153345027166970884771569564248470377009867306539909525765651067561469206243179931349128398076191343527697185621503830706962786081793684922941541387860278346982587613266955537661658290762872178943262274264269872518442698071740803348654979432884498325387891914367502216373887639414949708666534810790150943967552261784566807064223389183121842097018337587702337784154671005511580945061203352561008873977641186486411329543797802851687170689029405718850005964238679060831216343769937726110472062719631674612270280189383792190710382594048691942891984788247059058910849588366242040583661839652909556648327088565632553013935668516623074273098404922471223306798079369980663679384834570470061068270994629080228248845391059739661782931061860560471885879502981940197862989730524390011520964534404466827940339774664398923782198218224324947501796930818308292152025538840799952386664770895422652553001048617627935593873983261820664780741087440191184181383283133474059592881823008972802877521745614746130371270867458397947669194479929239465574886716112827573054399449862921848756786371256694093528939354445252982107030035324717379340988355940751249233752767859232080537593905294615931789871142076077301572819100166806770522640989610279496806693744031922547664879527179623280599252967312798199145470180258948076476038614919970430229079740717381733570179958239826144447635961688077895736906557254091308381271157708829943586485522866319615640269391896288606984913197136633336750300680853291208466203067093873351066206211200861744440590387545950223825676017760206768731449589862503824207417087100764819734545285413155956110973935392502513203027739218562527833928184236182638373577676924204364176937124909982524800692629718972302206046320918841895018757047574332627101153771722022984702066958429783991898174384391253275903031901896335827701324574427726465170899711725257765693565084089572354271720373289800771894565084318041590472265449168799966683538091910810388219680218808268112230335533284096951574552474707901869195009091115725679999564430886155699627304264377697381055884991818959163587489748644905624615884238053890659058061329235653594205534510738415946320144747487935986492696830633093549447673482070397474654209290342812116373605062603152478958752817192424816537896706575029503549052223540328532924345211573670649775905766744325299132846476531332452732447888514392562650701316597792117249136408012957796285714345647247558276401303653645969284610274168929982427654268308457769635632139856488568476147523067663080092897347542203200370066498922029999929505698800909302459594160766944076268881599919995870090816023168906400086971866456698530221139099116287088664621096051154511406451672539143463508966894744196867062614014505134190944712826603550302526948485570291927790598804904501647331298474313492513929039158385947371049294142424208598407977243252411956771404851427768643067715252694263390196416442693023061238007373962739428579493957698243697847673339517070575514130501800219386236027178098188598365328402678911540968320902754577817089100950124223905782780982712290284333087109407093151260337300143702248319724527571360365459929387131324474835455366438808610064769499128045552238866195715695175446623026275734260381072067771235586385090797899152286516046941628657696287647070719318184733635821030560174686349688341330182705808056465172278971028496113973544272743822597572209272729012419739316610087172429400109544034716095565463805508849603125542932071160862435214712123991256119049777045089752812043420272595761978058200955377418598295156981855779114239246361770427616542418203445646234119896630617434206196584351459475689725153998667912303501269127514585275077797066390577209435291983059336402336073947398428794730422803671261442887529252003736971840997212576385926502895228285846016045009613725583351989758445948485132528903207684784653225848629245048459581816046177316614382648412067372417045334032633736473129956446270852648583616398076132386396762804363877343450678375940563006955609595036534961828201697874830203558904693172623026344792266970142679222736143750873360705213238865575341681781026656280467928424428064556126379429321644701369986010640861930049418637783900138062324384364084081597920454212674376833352555418017619591431309267980074267532804128620364486020094893455137160435990352152377818824615359412572020717935507203794270667141242777142859252931749615957595846755792044480415692105547726339862802399542199069157266875594432057742960673761639293483664382248666027989414507765288258033353908528597174602928223273631727740573317386294596772453374527959209082656274447898931609251767095216759361913020499701881293777619601344657120267932922608745800203218756541116467730244014304228821791115978264962581481420897606232242478099796545113244152736974103002654495321670466033791017138735986316864028346966406635911872286771153140989734680295601280441250641277212797337344575669554913560075553463910366978727064024593060928679652041150128810449555388849830444595521720882608650394451207864541382972812262146710068103584433847937048422097705644558926254020002577459063559023369532259897844353959124349909072250594320877306794027014905770028565816902979129990831331232267084096848580127067124397501612110628215240522619204691583402593604502363292257093304034040741114302863640204953684842344974655133520398066195344791406794415745048548593722616628846702096648621664536637621195244073263548901971057444038574421742217451402980028852860771566226079069085010860476318545427483337238664267702274818065289840306046839991288558455800932457158986798703151412190953286731317538962488662128085817147132863156101901358232080710945915133297312035028467943170989263192307297129591148956515735548921469534789365309536568151264404198124478186181561407656755666920715933660137050939337727248614447129107843736486958345770689715990560769060947278622753376681121728824363154266171027814518096803315121019742350316107055625904316954594058673026655052923950946968727198937584510460799089861956372067888686642116752476635490707771922976057740320358907127756203797264215863339964090687242829905125194180739520339841723661286617692305338444422750755361466274375091455236313894184557851210991670332757440255966619999486134565766642695272451689174777297742191874567634264904938339842790119259728910319255516649463039766579988474265190326324627134399764516101107443110319589855557403432146390538898338592864231470987078103842695046998197001258714825205124870259145618510605093987752408166818919278086249764265703538669414451627660908753426469413314194255968929385687186871710355342947663129889698681395845900102791265479301467088163366891412379106003759310788406503519116497604923540958359380899090325881042597441286153338415414405151289271486261486458200208452364574758379583204858866311258572819282593800351741842081163272977870295289995070051952053024484517329262658289069987430755417079665936605584721817613118558984487398544579431075833031976379435112746787111259746800408958843077392485197589431161534538560437960284102070028691439553468618373253346867571810970563452658631970275418966495338076796267051522892942015557033941018589906796978961801444023665350630361243581824273087989923978719754439302660995866838689450209091526277773692616798147490531816023867483314865954671336213624037052651848742314854251089272555773091239998945384786346251342846002226392552674029334130387657284051879209020032563689209769192950335917325309528098939035599856581784173744574696886723216961784421982027830115029769921579577310360623475507560211310876014486379234878116122029453455595877104483910562741225682817667945613785437613016456679729111021144524559883591036570003432112378837283213801852330961041700095832159538636599234249270093691069247137860110206088763507493441879113370194462740686018138281644055174637664204465035342881617686908344998555237644602862051372549041839139923722028703752125134941014249499840344267997574904798632975172117669105755672659889938759605602658464058831346883475749856001301887547150167606352973161497785310912933738859149450872813473271601613985559940564517943281230640460069781581649695397139751565583314531460394144453154340368727354730700777416275473674430254432070615094197713027547589678392301805581978817315821644010894573873342205724157408705794507950700325804108063649816810089511011980470442860323810713850740854204456403329388860919467434778695868089991399914459321243369607424088692964628957757175458029245151303416078086837908340763883732011297165410017502900324875498000933490946191984409040838516618148933753479176442388505387746060407888927927210346223531064869291323205927389780117616661524125202194137779635460636902625456577701116534435531993875934618315380463195356728465012819691641679734294720103438496613118207768966506930053741903239645595527944406537827286564346180257449136958188376865340477603951174839232861007497472067121303809898057378817370267684058369827891947252896196498052428801977917274101552142932456778138985469269291736494133733800598077284575514199801767072643502855889535652662927567040992167793777580008749499479270066863487900350194607077990096382716226640329915652998392034216664802024796868309601348285534438384598739482699313057895663484814464153008254520680212594620915456863849345289037937987254127384318633989733534894371470105154282826794482262181854577444714753317073898517047485212493095421173607186036070322290761254021869318122292583352892731742781163600671853558057109504406687473491096704488999499971476486205782635467919895508628802105429685742471651167088575341237736764119567788090301486400137720909279642889788778107791714148884959030864644911225492089557636705032087557070365938813330921688960533846921139271130923651819145516071135584747038311113291180185103252996162756978843431668605506151792746509268717734743457122039620714006434783761916536712930673542847992575554986963940748618868352336304248231560221673626194371371866312033360802229995303528226998987552352377991259299441236650515384357734882417348828560334932862005566801056420850033829536527909939271494565709623101879016178956009995218551528090808130726782223697023809720305861502905278194303210039260774932191579647719536426361052915820369761340777607677329059604797067542019800442626388938584057332399816362465100048321842506543732614652708787016838030702319544636935387566083950981913717797064235713442758569095935990968604171769004454687510181956532294395747143952434160570110557114593065925821094655843830787363494368587722166963043599328792130529164483212667300248917129613035291852985502448390950843131735043376039902676757318018316082425412867834087959993102328937478925738714001111673586877549219313000412949515404809828847744158896683383949681632885077657869246354194271848434249733767873406063562012247757784464593232589074526356650603682962689728809557893829527219803026385128552063953509584683989625876354247320966388598485478322062877133658263754032856383894205561264499926814436684585283908478782032472083096596140946073454583623179549025203219238278563951468001940162310189413531152679076703161557878534052759669039583461998753519020370597345110929805346616923326573878611795304735750154484021514198744272642811643239025385537071367819207002470437980961361390505967971266927442795194953555353070471378240319134922090607355500246457510609769558421800115691988828705041149722537348995553318823035278926843129093233654002144996653307039689771342506418601694418286519827660336317957638608994569725649360692574070369312082091466098085931798340110427025194941521030587369961332648038075264132262811397024075469351714068781071362937424629862371681632148507668288795674652581421536354676813516847550405221816235336266858313284735028953517240020001051343492483352625854558574069382395114819116097378859833795804928287520062139230885043531372000208823150269766710403408689808610667373866494759150988595690434869422865204412841502970205851655906731802991483191931387983195326339399138439461604142792464418135724397473947705497563135257276517519158054486816236354809330933653291064929318903814762722559482403335766339354647987526498047199335853246855576497805925910656569647843871228979216049632549546140537796250932099196451563804796392001482510040945215804668640774783978688320571885166845918055059589363311872833150313311671450539197691789118234829616716734162887013623267358338260438704116392890762503268688596336697143536140881728952376788847185915896414824119068672647485339086729481371495438338457006015048799144736886619997290770812666996432502523665723856392692927121966978377441671219914219811663010744977092959117709949633440429747218524880802303336403404097203955522670547640996384352530433258795282999480577001963100267753214542314497128560725214589020999170007354929622098188155612330132433544377408108045274802455440575687000094441095122040217072125472962134150193828855566553679482835646422488926998364449749221269593648227332161912334609385843140348641113436356720349224646112227981510120780804130079439658117976011891296440120033275879446638844896869267174154271979500533818203416480137677548481625489830383152876516383732782113863557260124973222860381986665170024187906490927901567322064733461934746475011251605989737168957616948968269061448383198339641871335950487523105141287521763329948371266676453014100865955245142510567409046786810594181198349661306928782870031231545718920416433485701591831873145534381202947980811403954436240123424526935989847859643436681805239664699406738045080894559244203159073385898147005599223772647114513627174128291906485092176231088889886822089197655041479798273017230829343803765061089819832727215152311881345681932659854086164949516779560585764804529772458078516461046001311423247569067897632427304103236609550437995849219915028461871977810465388210732839085022364319105840392491457242945134184535086003949156883221364916820873539795433703447674262060264747511267970378193053584821157215009584854678995719189982843374075413935661257735285920915868911884997016813460154944119197661163902978978491514178945763453568296501398421145393722934568687084188740082897638147811326377370850813171578710388790186151463709846549679000391470026989702751783937505945159075794069424803498139121347287495016039687244849940992567264371736628647773979638197677182493089382645943213627514318505717510760926676576171829165961276539602593271896021415211530593024862839093040171024583581301661831292531371854771430512041717353588296847735584903111163546518478259095031426451716865125831069648808574192231414959368021550231608968591538157306794392300104290359612428596015243399739918061449346010009650277437813910244993487746220953917455707938936213077052355680277505995781933059771729494971731843370012764774363959115679780133949220074961090118917362652744888268310000854511832535584010079844170436988007660667672343965647560139557402738360934851017178194789010448250228544304917838271331430520948244475588483562791092773581445679652609016228801205737529820538722529772739009931700218891557702098560414860085581750903345908368916668954041086542161226898266288098858345078243111158737306866773484334096138352506504248031750794695618597942290239824117620374156515434963392805094675522879272245534866644518596426881910031470983215623086397728489816783807293780807827203919628353188523638801790807408468475737386397658617775734636855393266317269577148724376231161391070001866071922349828202323055085976254853690953183429709118717730510327695255574950192680016065231725212981368931571291039249699197925200971505021874840867619724888769831726318744689979870818110962095665248000821470242205617977313494448575577892677635114092224209294724085920603321218454612530037769932176073592691383182799407934109556612031487251747607545651474730447631631096160277018821897448441678654949221728832779364954601821496765840050889946892406251593229840601733266056801904220210597216631461739531192598400679036916170565651981536089433015435149426961605268490419882861273436626915967338958385341264952413123746427083099753206383942621724622385789010062171919780940909770398701674540831244741597050649770856273244372309135717033352738016267892108399372903790370837144715875005848775344538529818841480524649815789766497913950600176945879313211638644756919153080893178200722613236613390392400177997323528447241244893128462566181229226754976732121288844841881366315285948962876725761101645875124105996425735233571741724128715864667602953554857408364927993862534858814010006184966735418128542229128372537273777515100156503223706514191548193414994421602412863221392375473065117397152799086944244951252411261350564192561723135567990007661752996675891512356426928180618652894200708963323115846299998847710820509627900547736205638318866616918422618818294199756890137619954154654074979745816421165595096901566585305583825398952799891858267903376563119698514757005723952580797553920602177432606064937738787778676969000723296230457191158140165305532423123183620853489906175262887923064802804793132683964858912577763325954226274117361102204773021637918699664374249701188716790058753558717021508947835500024462739156853273593456734604492735549106860083769594014289794039091766295889999751974417296677055070653368504946538193365903086607384016203159592379804451148354618810959147688597858473973717583354886841309383308621206192779582244026748346904065413344708507256406162527931095462959773876138775428555947453088892310593537059109591270315836031352535985340689528921501011104577464945348037504373192152270731603320619926898360805189697181689167520630727236749847424112015334857444437209207623211727571074859162935587328015370165469888183752701758565956854091993761014275752036991779885217653425381696179443473126028625627657346988223982965529692346159813031336990680111961519692826041527049759105697183403614498142568271734144298266572120883872774002542746068814918356397976384088066553981416507961183231702058669499237003555005061313736444361289316444779095691987707154808432858055160937998274614607479639691165192440007311900425594628537831794155605077544198932794082304605974572182414688944829615035676787610979918099612324897643637209238938079435096653312552062983625211015888550544211471061198241543212797860476969918579784785990505230515052907589620628611925219716739140152345605795514775798108952951629311909637540341183299102426708824167091813232664020876989250623411179477144090103063746435387620104888862056396208061092801704632838671695608193610986757214730345753210927638393976410020605440536656810865396745926175384805192032241297495577668212483605774225511774745849200857365946212559148941207312696167832361106876737809293298275837081264867838915737749190776688778049859000402706462236568874655247687616878183868263858556302674567515217531115222860437286750529766099196841638825855378677513685254628820057121917507965215615406126364736095857684656991045733885061631088207481214614597334466637517655738161925869380246623943220740037374848097256848483898625972605521348525028065391554452488727129519208057445081096086961428569027072841907600647445053911048914070453301472165034073429006252140898154363272548726782292924827316327770221329979543121544686817285562540569409424274619898102932378395706322694975136479863857167041250764967559272880268675668845859735089396802664888430089009413515907915561550553427151983144471886511412788290036071624441696545608093836604174389912370178711616960132689637337974138779824728070671082887720435753246361873549340310933735823522832169816470882811566813850565839659906437270613351421370973893007972156666948252258333113473632936387788452218895021180423803365228205670464483018282323266112305212650927228066913277465434785077884398455285633458445806862204605397228786224725035531650104744682749308962311776721162727028766339583830611816278240253532210381567876335247535814623901197165649158485281613585697185489422471532857899354562487955853602986250339642491655084693261462239949644566485594915591057275361562213134283328733063775515653868545569917395440750492244310210472725644928912067658284277084731201160517369703463110402503015775372172924183804872236636635884162844714009429667139515358782251954990812632283368336286262635307670742522320540982742436505026798122625586449492024385722429706657198183578506685640844725994999971493432994587337369217517612463437525710639114839736700658257968949245031571867344669689894427254964726884306747277349763009927331003786361247952306741517622040754273847367849486737945037299021602924372106580135678420386271111134737913861088410234026804512911480820450960031434453946468074645683818781329204666116753627227506591596421497572608018154143738466668708076950868489559754595477570960980525912833284897592463682789062845335601214805457318880249080057402566517970882586027437698154681260884037080795873683039855096490972830858487823005328253877709275606676118702182255964262101861843066339813817650640677026778461163237488091321781430598539578050304478210320159039801256652403833442250897844100328120254632954577876256200916661663235258348758459726445652823772321421903409359689145840192379355596547964978407804731820311633462458573189271515797891766765662560306067101091506332614835292236072290482944963720699546088075067143480426431968535845364466434479229013611168189835572395038802812591456613186693083636334936090603483213035705797194446194299481564717860215241233640112841372333452510565631176121704542180907873285626610385590050367590956350500064448617326677598529279773155294712075591718331915439931549513269820405567797580315968985949550191258977846225011803837781960039138232057027789223182140824246802011479786997631904357623979829850625615972824329661245648100634142925657886139977376307143191703826467574149036276307241946211278585211016972028375592224943251910601249969353677351561617120781174110099520909801520579773387612364842599089471087979937684417827929830028052588417310725174630909037541536874693770954944099218219246380695451143475499853872202363163929253066166303505378309380107158505901038196044811579670276507153353497203009163192981778880306715206902806898696950325404083559689137615781352131499364996502674762865062980267247481789782479451240312302368597115034650242298190215849473295348341457258922892283646556931426201985933698294688321963924813195683261578659518019627723877042226979608816040318496962573427755230688649991055009325388358824066404283490947992928585059516020068536437499912492906652606611138051291086821019687151176672973546139986770584932786282379097181927091336670548950383388362681834036974625402807407422183670110223435008945193596716034956468595510894416694517425343873838593864913026979686980482534277937708111619640337058488269036229742507294168099411211826565805060445259761659547003554264778362874762433747206283397239766436826412592731165237833258531911476459652097142984532172125482297205600799060731657922730855983427368429035437862123938982544499086856525936595352433840948453822003669854675537060845086812470122844058836577968351043147675893033673292887537801724658752249199150461763920095457044773377418076947043401804797520080710952135060032143758257765427156145629985797856806703302819056068989521798983450216502463538811135586580232210058922467170667583043197024795043123418041899982238230207955135110641978233086844554928740386617764870669461254346062820181863835423241972760994338803370385159662456529123555423229604058074850986569695843166499488339411108313060566376278125030305803221211218646832917709571002075414734122622248945210631311524392171766692517358008645601291349552832696460254894920200250424754153694918945674842455273034808096503708387569129620363689640496641878137630790263990383556714619632340029148508445328125533835806419234063831539591799015926526836249387487374273591027860566558710097955831669884832361229114157390483512194932335554312890202730285833816234572869914952691620859240137141871907634416935042588553093916209986010212714572386892973801899363896226167223645261284169038168993318944077145752986080102522068556713202624578375382611795721469090788317241978327888838934001487595844459880858558226976203253941976599099443077192530407867953762864671128951370226031097053365999784173338027120643180372138743832752082070441797601350441875990769338973485289873368944618276234566487357785327836065315205442642355218607463125837425846877134499870806290847074564514939396793813190135368766438650697690722301023589580063993436581385370913489344095152792102431750199957655887008402542961432457634617970043577780628640568827361491693463759417133970925056384349687405921004448969229667037270150392278387345282262752876542050274537601528111916025743235502949344117971339035273974187985349723942162465825009293319520172509125572071546808531787478932743295687003532740574989635932939740918755819558248245588637964824252980244876074993469606566797685384286639980845455231489576883972419376572669195053760136226768832225725756275409584652923537809574212134751413464745624731341174513860544779203692238634531036733378042986899029674235348469907482183516670168241005533980862656976748630779159591515377519308143741450280034963242095327370749510126316755291184043559016872018567231479502448382882429135181360181020227078505820623069106340587765556130558333795294774765443635862215782722582674949867617398202760225719352460661892599496382440906645660774951407142933144933372682297261922057316682280603027197687836580151931715670162932703545089528705226825261354787236484341231970280783127546556786480330417148598230431395116502483920270765683204094641902362233143184295230051471082094152262607163644818980765886789448772482795723332936320238305446591267882362704920126525816242129091730959882501723304434971147371706970515181199701480278207294913310005918164003161111661468634151493628338935295253805892042131851484562223561208627860717996754060519785029596198225429567855633524908166366078434779656448048081214921247517492244478950638336708579651577462470380093472941561626890684426026463342899976755719526840534186581594845673723193052608900587165053933998770895085214813722881467150824916516921176254313400003587982442362369775323215426327845778378819811138299093787823379880957904518775913769904304032497378843955954802064953262882051057873535484251049404147483107968459323801987180530185175314237191841767912466571238947838692456376782532760527348686206924895406960157376653747597872926319663772993128966946431292535077724117325928062687558357017614310546897326963092236665861072105153338540824311076301470268584228829441618689831844161252380767094940830216554590424208903344952134837322144363345920081365531718550119909648964262889074576505437223527256913652642768296052413489880426497950299842462603502010711261282677988221996016618946257536806745930277592803499776967258484343452313425284606706777982479963237968057096302862705131362124056166889881022272604244502278833600676317478189309918248795610483859780128204516531318067492847333853442243046934535830039369629489876446953058473444465631133294934611834077294237370934714296278062926586917456060063734919790428381908937345814520677003018330172277588225951279672050310207756575396038381573333952115412718410795492771064010479176006640430344799414218402809823185572169619225855402253116453340874230166177095312304321911631579476505939205152475607605849772610526508274229602288630995559246018352203877282732931363058933738583102647097242344757475540221537177122707749245277812930731430915345984356134343206335917869539332102310863857987053899110553568919754291151628674517970144566561430629601500794604173466158526604199029782694603446576708745033102999436004476015760247728101539490346062603164279084753760604738479671825872914107527395972032813251129075460207574418590924927340841313962679173482115544387544449180600552168407738052671724206887616179066206477236189194433239101087737974835350225207028765603959872043744384037343423181960043892021684990522867988078100985045952144391551054803568280329669465603773184507881745773907412667308639276224796244936703531677256941725698775344748623519252513074684625118231233207344527290848627329682478376477689059106917356065391656844391359484711006450007567644960390241719932593712323283991311257037321211483418303198942906689874432795470143258386604929372517561549206358427904812359968373730951656372551861632808140890528755798495575228609209344887496448315198877078743509547922325320915534676637740739083526732248047686797240829143863980899072645056146064542677591047984741571278327672916277407984207078426625358916895807312320254522590523326257752076738768798725891920257626444924324518709480759963362240127074083804491609937853055831168037889687950031769397397766190385183442197177152864065193629991882954672207854297991383748393201584418287491350659973942350061299585559050420826935748150860135808233304185162701185889473845849645989616575139754530490690578891535178759531963060198966361779795509919704923028626568961191763678942204593403877659698400485278610832001560870790237799703925993099307876801099929019440927790611927996097019487110961637176067701922784812371899977486613893781947651623174244953787236300740360142543161754938461725039551238922913798291598869467815982428304110450823946636906798773009845199355898517852589439668891724885779455729800847285720256426949431442910457983130013157516592179817453200049028585591949590097244178617706870745849065513786355850039942739713306447786235975893108696168707849464729537361696012914566205376929582191033340554201546334416757242425787585421348476576788902708204076702110032123610919159633696039052874935956902149733993428239495526421380130150513184900298784415916185374581340274410186865964529820476027854092663059808011107272594109128833425691142734059198008177507252909675167872425085887559116950481389811287460300852804062289843363576980775987668689826501739471574036084160813289661475776795142590348246884484466723079986181351546104662226999062172113020408657503205288758216337569746945092023392967895863516171635901548415589919321739558227212119548950048993363790784854738385955641837727040570707615140951753417138815406877688594759285336131066828177127255102914566675654969772630756123059238187529776114336356844198398007118153961385298056666441198632807508167273960215514902791337782263262623190498247011439516400519514417036211224625361376095788261256476482887805967520387337114858406848024192509988361256296715330362829360633369230008199320135372001051583528399700412404173157819825519064573518792883057430020171497478061714260920235753851602405240622862333390136046145500314058587474528934967754043493391463129758788846904256057635212788219553192525856438185238120655171701818237871176128828278341326911601859674208284442924957271158121533822741127762224462795075877926281958492608099297203966997691838762768262675110098995714576726838301193616698596109466411365823728668754487406357273240445028994638867411848098229569484496069987830239997447828760729146100049193618803185996972544360516442538988739996525192829314544010251330015509117174775645769367074359737133120070147365975783188925511705566940100108989751799817103938126115118162933432545721584316609893710230933380410935641066834373015948560761134689312090789836170484727234974907609341247929941418847405720376762402491215194574569267160182753222651644517945646678535279486802890972051483831655683945831395678032348028982555197157561316285184831769406247111609291565028272289153708958062515701389277971798351784321494129775353971891565605555671878168218576743543378222892402790818953080554905017724011304532834676786329456189481369794083262669735729514101567623638480651523799115354929759847582258464122386044709834993200000306751259601513070911393772215864627883970382402255034889834914074489355093726351247791933731656376709373678198838239790493610164121849929999069745442873652961083148731924553944289158486982108378371002338035633515189896105651971938528276910401971122674557560466537702214949618199531212090867261857706795483286396386742772758541792221285872287961962664800543772732689781617627675693312646853926207912319489777450669558758780672589524242721677513074651703073031492466610032907108596015825430036483911603764388518300699666899115430170056134713066301356161466623580020632995192946986543536792724553622904816967449078531148555700566985929049228165305609766725139308361058972032015848615466803914907684482095504135831101616959598853658520087364994480315795616498682961918741188129653541448287991799232177655997182187467739551562107460891765939417387863465930545833236765561346791947369223772432996220217815219368493241729505775064823297999917510235133445873330083422088719917457087860456432524651234469074923923474281443540973538224654578935222055678208898171957067752908999143723275250324706142548147785919037158484870526495948762980502101986605799939948494554395631459363462730795996484210609266126692100481077923972262572546257448032717278324549439990082819004153138509644494437842392150138738885865039612565154348897695318783628668623036642257161508801824932634921599675152609199571213927431358592752329430598169331052126118006698760973501596086129444193012887970558746840803407886845691629083003659743974984636776917110786432950818555926445228690703872895863237367513767013540357832155246703419827589544453019053874121243898994036900842459643337799426451773423285604119358353757510509087192483083625676438662490560935183109321580368550047908645438289844830079330606529947187462135052876943307742429901194082428474343570246374489872055925580798809700959410099433421603680811631325862744315553014649203005562560390952312496278790460320711056091944438872702384931661457007100107164041533396654385273415039735664539019901666732275744626215855333247095626693429810410277324456499528660813093228168331760121576671209834230248852953658741359924689325164444403327636284620307127793301090188673672717740794262015517476456009580546873016465161736820572493783213019887251191175420656627777305925310204037934280772948972353918381650109964007794160096316776831542000130624655001440609806333797215421727170192970642325037056808200804542439353499075944132607109646916042787306816544213991929276226226384973784908853448698890746026905743476887107354523088243092710112597098854627211163197339680231112396550493841288138348792817633375257686418972895796296673584887402761862235347966546589913085217824127323490694299396951012814904991488010837167869322922140981404805154513792296493069627348585173755487502522156831944320789336914071042104051845537936455250723947169940430901639092750619179438406798887738525821336876947442314871853779471658233446816897626361257175661502817090031509160817078060412111209884912751096263085188943008096380842393688106081386156612442550966750920078118148246150782777197398025711299010019770233799922115030599344164486078202390732496240048899826843751640471572396798375985955931858313279378518429238083876569571600139402872697374559303072152841155557480925579303241034533820332390803466612062358857879767529587385613410106143520547848082403060309592081741812127056142000738225253077680020510667823992243566006607052173860436726026476509701123654554458359651385414438473209628509301356289838940435525439537694071202176236809521963834564475575617584413378828081253740335337965154815074476431643273561722491998723767752479137057530885087197223098878200723321786875498612586698715608074399044439423911016297127807124606448250191886372498405245437233221601189089475932579934286137831130147397513376961199601527808168397242408859321904833817873455617754629428486735812618484564699514682555716712989405965227540243454120129195985537635304381097621600857988303529639284111317660278325547681838999543918554754478478924434475956327911177548792104543189285378273864303890900717791562147980888473563307323909457624700428427206502623040060750013075155730025079347316324404972517725510210291420645901523109177080186386727670745307575443877982810884991607940765406361123112600338773272394866360380316096586372653168483621275377143399491043674749667761392040831235734344884826003031021184514790103303597950221389416402984302968227852030271510104826379623285161005779469935442149437183981220373819642251081824739148987180041124655674430487690377838181633803779535290706088153542582480482293691404648170737208061971921851671169441415376075621785850356851833139176573212436158030448967091344421507464498734041507709749030455958505636753941599461631903197798736351750769539325774385446641836973325887165152078226712683730288362075811073296728270261658262047815155660393998931818506678725918633481747400260647911297591008714780284290647274283133884545469577173746402842859385528812938556513084424076855571298799144014964098822581630551925474796088830982767600762021734596956835248756837301869242906975856421098157114285729487897988954955791397229008663799957437391269488310286014133975193526896592838955772991124276118132566300274543220738115278311422366316451332428373493790498220545188968379298179683014012521957835117470463096570157579812546746039306102102705290418099139060974609966192058077421890698549865006371977403826069950946403189405506108617610932262808932544614102573311423183706184305554135084144209742643096156849266668935803235890551736348355457108793420724761551211688457128696856620860964447624672253335378832073645576644374787527023168409982915587526054799215457487874822847814693129717589142517755256144548988238139116951746612714637303864160581179622285772264228078603997289210580683991560164501176388325151929764297356885865617879817986531104208023109862097608556792664541143210438877483732408155364686540115690062585908489128607169120207445356351990766040511174388074622483923400836650440843389609473096068769679972812077419185517498930349417006611665781080887383176259730777400837730888454897013466433659208703305202959298369333041274223846773623920523631235853408321410540779100333497382177146712914000956126871401646265968157695937342013008127455648789777530226270741879248672802486865296723604691819490891033539649094716628005214902918618973633969235345820069270807713077542593896653183972345904620364694469370878613156284633057634817681930882079725271501613209015144470388298337173830901809711557998197623993461636415118420494687228776060655373831589386696705274316703633503021586870784258553944400315857040204789481003499256559301966697503467097626947086103020600679128845229504596064810853331081484717208028616750810572721230536279998157174052554364384682786204183990022826107675986430779070901433284673088255975349112587727417257496741069360609736108405887890280485378175384568867741691147004608993337396634051129826100881361536645096078432248794177709546247229817895589781046850308784796165953386264854498042604392933255123155278144637337068456701118645139103097429101068060661777561052684626842877624692213382976274729338139375948869993004442503739976441786829350611722637940624499754768695515409625565677813313926456080505191541399608760646075552656742196779055445291068241606021581051721975411737252893624709005660237699314685377429309401183665346205378881693570850249398793699125799253990888046395955508952473142819168970630733546683430822535610213106883085448654273943470070386124529430626442894030872259445753176036475337071697850130139518096814882093933656316009294524872208091119904106999596739103429814956621321697399902541624175866719134669139257206385783782205718837277451943355491806274696885013987844267174342407053234815750817212032064496239520084980942412473368585085284722598473552100996198128117230751012818200470372068303658224242610418167274184924973375381272967488083545993083371994719774522197445341232294726944693444737682245746604778463247334023140304519291418586623254344425141517766770120988208419826303467227507645513743870181570732922555093836485410376198918408266238081056120215427410185629632518344702367608616560497757868892507189772169079939194428292867268264782827714092953345827297917632838366664536588536629004227750724550651766841440143997661075032087491456521448256970284795472463339267930614178954377160510005623382781936801039723673122696297075381074779279816798658177914366304993177953929672237650611454545864886701068174505147668182923154322844394087984407053796599298469665028794846315568907354032437639937287059743889453974094485612320552127792282199648180888258516660143198401258087006070740544084629167793693313968492150761491751862848627788451401750420101226092541093684549404682845337698159259945668807880764497582059076393483547823590862946237769219930184023012904970366243632732307312505801694310419062133412497952670174547969507215691899718195298181543584829705489402386523566101000951063560178293690737823010815237389385759130462972568715080543261079875844112283289458573553543132828854010530862734705053279735323116350127769806039115866810342045952132606335622210401787655809727290903094674416068434265050794549247213153172221010431526656012931846582413843392132349287607607935948382020955019687687068916918764671965357510464046419014751305633929667092573355371182205457823580716683724373870293114674218912853234228001992113804209611486051152754150017861741608583934627909110348976740075959016500179802565065386344999098109364378154704984461534861118951744537059286505673008753941490556927668816778296257067368211862060553506221064256703327960089565799961061439015873628689661071709605674795868557108577676067779604839874040470459025184311663002886303298680205470918512735142085054038044351637073586696329822772459276359414869558928488045136664599906470080264214067500439029546553731676145033969761728993678783695407963685630780657550122757551427247056130528716601915698173418188559231703209725715522153142505204995753334650371933311742286069072586132910434799357905699030364688182705581718344448027924245965524046678114277972378710595811357928402691205845348770078076835733255082842447576828048637374464254730753942568270617253571152640851534215437521835511834146935461008390139806906199432832083572957882914123446446999611097893090864965605406011703345114029423316342130235534671460857828722551657594925748341615115323106244480950984855635198430297607594761788885788437210047688619080666697829242677108202237355462670658576976622197868877868857671945711533045145681709469109119138146002512341763402098039873693003114390969758706154072557265485406310887654345189790981525652866927834006905434845983833373659352010081183027660630819946497351162643240546056954763686244691184008428255939743775006054109000146878975307403533632987198653117696557966344559381352212077538465834164483901886641573796793104288172918380519788320929861793233567908675644356004398557762636241552587491297167867265254097337439708666964420513068170050901236108228757525031545953432980281008670461253279058867228092327808633832035331278481303950366091468258374889730537775487881953648550337229880988024017832293565803302768111051489143524793759405722405768053101203127285152172924693071712873259922209711032978962109172275132303723541504382047231866353087472599601583705239614982872582874055060508266013225108272109361802218060844749001110048951936854446154062355481838024073356220580575451442110934151111840087412409680401483717856071369176821725092957606103521876473855178470962497706830114790173850756588318150521656562622582202387262249648649934870330839649699810018249888987323069382729412418224403921579650456452468321466176842506357201973638815371533823768622150050762021298404576354463166074908843651117924578322842121002454784716381848733497111502227471007239719884992253483128797440050969341537661503052611166160792683806668688765195220345719463551989001869053496691007811416754571528362197946090191668216415460814318976693872473040510997095292543792627935005613782915162068445955449351380942888514159960711038122241578171537219330592163490095521419621261401447828612854583296555891716545942261550538360643260193108783123644659429178398942624747915098619786019810075476031562492052542271267872736824113230336673742204353273713903464510289488041129010022247213599229820273611658381785543150780839612696974481119156262083244130764489604402255063780770630186822422526173680917342898998955395715382624439064231964706632928567575441172233914636682232152694461199916816178224341453243140345615680631613008054388826363102657672660089330297746483619542174885919092440559800797584162065705911221780396853818351391296869423317101573742161114711711352169704518477366146876145531827289486418119736801897987150820339434117600072351219703405846211267864554457856249468005257769451091803209222830659361191733377980156075170497521762709258958677754620188466481580993597804197760822583881047025744455109776272713281413871058247683983660812329955035388842626150315557128404429602530136208747498574806592156507224696344365612398815952095389024897172000105996150626707665614550419716016011586529246257587073436992331092842759856587178691714631382680616096247920955007440787130374194248833855309701108295102713779962066499582721668430955796494744074576848615193706976115286490577269077517100552283897344262528455129472868586386655737810201117095469183602425816444310961369298112875678870349211340736152533022276819974308273493486225278502344066905821235032001746824235108070220958943950402416031223119893050876555929998819293032524162710027567253100260000390906257629128867267176628582858313542090567853784540910453285897633412091123922303014757988914483763259853064212969072532002977977860644154246364262786112806225505207646514570474061427793960128850166897343829396896860158382702859394023855122316869560467518809555485197644230174500200667394457838448749294775392067477486049645606680098478557457282610670295426575510581610011209653091987727073941424997965312290361084058554709992906701578938960886402350293585862992081604039087101563378701947801137434956494081601128163696626565245022255549063598774032020041958447352123066010621837189658240537056022970412739926359257152639649076429568436589114623346573760638622301217705261737600028022289779295093636673358246598700899073801064898077737654523999515017049968874327381105418959643725997681690436472224724188464941547338064881665884475530446497915089034071456134706452753623556155955338797157210790118521014591105602662379853195321535414629772575721052960232903493290822661089133214197425016942474459648271099495941339278221239070394652627721943303322573420447036313964671028686383378337353028867830912142099825412851984441165695384214177734502480809156153302897560203277693998962281148947295185332400378306111705473628994599339019295326194991576487984979942770383924395758876161415679512449804787142379222302480413244269075096708815075694527212713400196191816537514987966519770800010603322069521981901008444208124396486364889326738029292962421716165134032566315074463551318193491043188446413695279383120527520582552258255932896696720686991752019580245512795741006953475817705959935740550074838624150926082085369334093353825275434378610576711011077204380232225205808619611078083909566312423703660500008312465986333658041320180548617667773597982716822455731397259114420456259035193585843264955311163390385333976430524636502414649277492829005968387911073907662047009801829136063016708686816929807949086770281143666026051541070504594146479637016551627548409027826056080307385122934689123884393373965086127849390244557828974585987534890405020137117929956446692536137508037223223076767891349287476388618049593153421574478522495411463042319255914637958513296308269466826785311962997939475555720406341118547591553114682711861174931885719709472733379526064336433332001348956514270543956780620518455105011732450855799414002588600282235559165362127401316537318634696712232023458556003896641320454537891436037401079877796699210531304396195721370340302654203963705308534792006026402278620151972777312359012037212150772752339480850475306043507724181550861364995548712315734364275659184226374422095184653326679913239306905943118740423856344022528623173364042521013121189930243933989857921115189206183764877766753146445729472043994186061551250961417085848557841054295270084165791953475105070274482530297454537728607664221151597071006739982916236587367017606078192691050038331127256458289513665177934097698893837351192352926922472851782299500934723673872145397186043228417388186887341784261593052823360444255940448916206800685534909462899254792327889100064113939700179054618202157006027708744971469852191236747835331033534295759926413027892445300963441027357591112516009206433008302200652010383442574038890640750181634109204037719567516388124476517825603166597148491221442936048639050647108050337116180000231543569538887038760113660729683685121925939321466262026148771523495311491076878177235627606602593594016541721181945273148906653103107277643595125589265511401783642225489787089938986269392069606275288364259753022009633067438108794236472256737046820824983091041264159739966542303516806345854263675501796989136408595236650630594232810156729095611578893067275475180610407269717132864151049492617464984307452242933880995861701832763177499043993112536369474912119478088846852110298907720266439214952575241276707825501012085782793781898119558205049137259439651467585889267490582609094619611315215313672400903471518277367047335062885220299680345162015403404654047934814685794783252985572573926531881092357416717465692995825163731973258358030339066369880815894283282948293502453024880543376042548052404816811329386020445708567333656685987702552762639643141689832230934489597482993070296491181242892755905110357900188597204059243226855642221991620509025713548954957157106021602088310827885931336506390199914123083840857531780007021273341987457204662860165369091566320917545150480353479360639765311748135860512419861202939022182694148819415131429732940431474113172542581855177659733220989774868124463646605278376949956678952078608621648884901434145047238266457130389030481258222900014078226228146963655364173244587136372134011476838852721720245260440084470365958724807285810022185991069495400706839917450040763419176149099114089911036275812251582720182211753114581179304926651661849445689079464389225553897301623941199160438755144311016611376808702094990413515918165183882702893624556995829373892602441769603995815943345259036468074670869858568124387494875101242213864283366542870087851343485828229730352290879420815083364494027772821219596192431260606755624801455427902025401894952066642661519813727557254496584651296113194666241783772544060868459179147597815661976983075398829880951555849126337394794995525012477382037342885647958092981125817315933771236602114613006680793460459418967335422998945650136088371728767803806101453823725064176229819829139629213646407773649307895788333598907824518089654204892422605489478598582562039874366733949634632197014305508005038279641551269291942936570922783142527763767377341841064283488175258576160299811127992567989922424438295554364698295032186363457420214902349860391249968670830472808862959626167147404899418982862544785680076175297691764937361649927656271584184718506031002610849073253073246359145426293537746457675542490775485673774888450450659720424399534926700310775581919754277951490911656642106470892085178295234247791832331800044860184760105887811525766560945769393112113808047902599873410595112031695380257837487947886074480230710105033475687265463212589407106100835233136845837930386264826354869534778487218341842728777959554422071432461006682778157900936768601831492770635873807640199020308284509123368931222578633983674156833545147784373232728789724185787066046006022035201311352175226418124645618585505566685809569798024642037523855217074511825587661094148516217799505517233477560775115058615205163346505158634449193124613529315391534667223790385241634988136149418378969805475764534838995017869215062038193441701871063183536093977143586856931101691068610285594889358186356454201211402669528411082982524908960176669438367205607843170581467472362869908936093234662215371607279827814499826624205588818044086466818049976394650769863554812096298232527049265008587645692209656322277833447686811575289508420254572621043308227946422664828304893217626045327657173330399064660750287891203668907911679251859843259597351658682450800917745692634797928981337313909176078399631361884551342056718806596478727612463051881694306805465631633584626897164842751184076214482332764953299318908550143862140416565678913093499014848873861356100200712463906052535923376657257816995727304092425136853767436669428962217890141595093202449949421829179597677043327643989685392267538627984897944575942230497626703608313380963972458855644392419637168195962351764884113019757256957488378871568651603695810323937560887733242044118008952988152152524403209922584480887729303399850673976590081513418339325105878273996464698744841623760363662840869823946966410067352703898396768829642645630746206894372846335549148356147044370964123720201531619338090526242315097051231082674445623977132283271140742266169107107425083476099689034823154529032172226584732114101838839671767353851226547339887898792467767545853542830356305874175561635346838525142720719514544816132899833775202317616691041164248013398050924878976609868256529481924271554862878994832421957672065101689331209460313620408482812690883362534138806100118664974057400137928405059308873286019584310309250455964091487560343457148979232657523461937691362488732744300339695201487723514557969171492056209112235433315603648122904617769013167545949309768578093624579847861301927136253767552833673458381701411346941086495602644655523404728198506922768498760254611006427850662568622014935891681023837136704760913233580053939491032697152840167464195700990641484100025006931137510927656444722165413121523368649082150562064948605740952300550001967212742387103892626489474723082695400808098907784719098824628714002954686782702124372983275967301064428283135856307305303609062239352401646400913641176043748953409492010582525131598105893368327675918565810087993686424473956363308273594457341471732895866024879322519898636705269754551728615151218596497194086669019316745257149929223744464313203294162531005768962266964408953398645219771300737268072670912996857823744903782913363696493126128812513255978330545170981347233701807451802554409807621780359056754294263506634104896932245866473170780743932463883532827185132867726855831272692453605802474422204902014769235030385093654882938541539824758394792668910268468053650900682879538282344797443087739508524101473341471934403521419326487075719044182012228933956901168499728505000063519940070436731627009558858377840341705941032297020752028478248687598937819835284945945584969519277000942947982135735354345650138912551835671638815248742951142705577813232750115888214697835674965814051305710394117051131796099867249769291169404970360202557137756468025457626621770968172805404257264626081019686034449620165185030882600123425966268643194064579035333746408249963238221954509078513118385646383032738967146329003356818011109417122125331527210902080149528410699387630749893113596430881919921616709888244214792978089679485782209540637681378272682851552428778881398147078295762165131937636786234717374568391336459601489691475756857983937566137267750656471057656921566757692295195086622397978451301976727268661772007650636026042085604944447561517205234821212584481243782712151690957552792901463760323845750284076368626129938638264574913296454433686844949586739106187523017095642967061368735106624574631777316206506597773787935287732618627602572682010740109095728334269110055549077800133264941025510198254061227562651759940742413435126556754074273496237349135667224038585594234728977781617704216946983356462858929843511775383561535691618452210368489097146944204968949340151402514008682971386061919782547997874698312475463556435544863737251356524824536624671465848004681592184297258088082248798727799488610285357260122341042545553506934003451179770435266639072025306753973599685572375338594397057077878128271049846532323564278756717617051862510092496383520138408443413616853603595522623444580386896822075803654572567469534956310648215088745986358522251274428208825952614066618294210185662064303102753687147782781540450189713092695725878654984740907355189392273071767824493508090487236050908183301413996091991511433145841887227508163798339799751746679971027536565324904326687112425170161181129288153813267155726675537701740980070488622268500336951400389727355228967140726776467507264190691046687401162851979811140491293218014163587760632746735238796520550904415733006467394017988952344298780087521322730523727770041786115878291979166426529832632092828777061036623912703823877268921240546654297567625483585302707304617285671564099463251075323163496111193714387724555002871891670953975012903317812198349342436170974772060920703435664831800519262694271397346789643618528709791636047410393976301232448311124959101287924808258377148320277117635064316689763898326585615554660615535247737342327280496834210763150513281697152104081491711102061821766854669004594100060637602201697119507579278479104309199170461852146549302708509744994357317826823209833640502015529564231228926162840180340436253887551448045685975742039557306503143285550044515996937840037866438589129019582953919949337065724665648057414506821103847092314891005481567910185266346761905406818078316228820290139140520390816917649360023345528775726271139487011253446290253247988220185547141675147839117351785697296903379059946316411789541996780019025545573645294109034589656804364830749075224815941085197539407553369802183770160994259497421821451506640400361792789108222945217293031002549710693897910682447054744618734543476211447028025800806619701685814555394086050634139260162528306070292247012244420803824130914203852838220122364583595602601974295074711021178034325180840862300854136727723737671342919654958961360237244009586838735759826731639911447216918791621331693539701631468619135101995708521034787240300890599029058438863013839505975049920368767422272982184822590530617055302020167222359716553677876616367065871539272612363563218197193158835609725655959904363329083925735093462829450263665888063731888370707017213679800567748702513048201679391382844615005342380662669761327513760750607423612551113281264339967727061215875854830488667703757429543359190367666695182278134658203903275073462254277752334663246886323848793044338719793131787808600247237270118121956184772729757640016619202618493603758621478321692993266893738241478486736925589234038805250929492017493183419797378148057863484133592078294485814690478853757894862902454818210927776535490262088079394586563863084350283510322950777164124575478881739495706474403485343076767821482936859376583466112252639345440698113062440865319313016628500535056504079141275573361504500186863570691032822736860814757816186376464025994864904569842548220230352919683456143400933136105749969667169767190878744517919536187628694143757641559490177701984608447678142195897892368104304953604424008979113405289896655103102672040907650171493679554040880202037515010953453005031738076339428956149639172069055690009273191572002518071422877239129533756282988008519865866218538567011358136810694337797770932113224269082806440083817199099305552200234842613964085770355960913871535359984962884518152122653596824218418579812307881698552634773828622998819740856889956886773831733039457148560864080645943398223500148968928693456266454958730032611452433737851546633041638472817403816482692195060051058008773425066132389190043284768161827461631536526542557858350036575257911550435986869852374193877818343037179693794256813630115331716196851232685786246194544309294320684604233498836689191770490305911833375177786874507180630493976406639285029047524203719358710362010674553352417545278684809741013119453176257576818369940590967471734305118402214278166030829393201496729187603568411732041920950755705613674406717868504458532093907035470883249841205386154874208681272712956430718640220570217807753466103910599207859729940887246244762602003332403511221060545730794268024247864586228044300584472420519014518520122661334532938328113657473869815410829286616168970352294524776712243163807828086563387546010695482118799531580790999625941580414917761151517909000845597058052059565626561395085580134357565647935214664029666329387073058098820612535526968521559850568605786980706226742121317884342247166585351685083090770792653161148949046470017449894870387637971332192841692157925590568617131309166306880324304441418337454518248692583953539792495598096251148101091854545403561375813317955738796281525382860577667877705993869475706123763968875245012669638432097991151710285351329521343376246667748860540622845793886736950306297075570601224809099198554288997424612827880596704911551382595829341434838029907314126378912920221146226098706835723821188044252817823550745913546724046943902006759016252480732036452494827755257306556664004539257899715694459537356110129732993456613930432119373823051893903897359148699982800497461103237386750203936602442342463207678080641106178771366913909486649928951423476280483397895558218749809840293955770775366454974448477844362847266869065064636595274745904588168201309905751996296372549235011562084935807139740898657933267456881835645123319830312065543902789979610667118610799325382175973233750717615288793822102692573499767730540646845850423166444950925258358214001994199122823032858297308988785272270970209199438211178677675735111446659564973041295812372231574889206034101772498041623634787273098986388978208036529600797198072249904968059575490509231009654200818860948455513445804390765136226254358021936651226783159221668957921020780815434820086756628620465224934609885173564927593749258132980535559032160098956729283092959310194954149333779356456132281526278525134805492112168776266096389157838408511155451002324842682600016238589834481190100698540921051389889198019927570236030667212299590443040071925749703737592573568352620336130844918128158185826132167286915974809756649674146588437249757260535870142137480162980883128775134784326926500723083324273508185001583991946481055797873342928854300203872460971602641096340390648522713864405935662390594502372778733780829051290137376912908557913526605955482109043862545254423629041034207407942024132350168640059242276251326316362128813028543388128254609654380610900565713350573025299210822618723797298930553496568391731390154167913302364738812014149127038559759431038960445128309253557123779727437821016448477322263661353912358068130382113199345409158254378470548527579537929484413032164609982354661193517227329971338852993956587632796763725324877031544901663706111880070386493685919531884761795007228912863597127279123759812164168170783760531281031884943911856764022663262003593015822958856646456312859881889429105879293945201631552586300823266097964091586877080154608150377438173532239607938339028322501455609268606695373307021016219671029822977559683987263350682091369476078081713588817034732906400706293131954398021805298412259862716643195811520510096496513145502009397877269042434568400280466703523388198098901072064889639011144541897420811745969811369395337590000035426854339211176604994162761215557945784322871433500822357609354272042265922516119409416990024117729772236363384075840957263511473981532269695970028784246368346910178995394868484376603797959141775806505792482280565731342899357561273314164995067102262256908520564175748092689138394842171859369929021017467592587237477846621385686685851567179604886782812037885140566128744143787916308481602768661657828630827937859017337729913645918388161159238203648357207885448136896468511713147973452447540941653271065013794537039759776915237584223326387554473315991897399017289163114877544319137345372932399732429822427969031453420334295012777519699246882150704757267057195866572980715948911308660272812846218287691063756501172403371979082444035652433404812531401014396696837497211554906376033274563775073212710632056276621336281660562698440662972399127559993453697156526238895457488312841399516775846277511304309584266192502130569458098687071482359257720739740536356332358035143262529248658828806664999579249622965144909967812845109469146292174573856111917177633238838381962035613920145159908364487053700071199919876293284831993261751139536408722090161640454899619564403885845588534635096470270282397534075388343262044803344929537269895108039460404356642528447462037466118870402693469340951930382712079115889376926251679404140919408257857384131344066969840819686300823721789055973776309457646826229810680604143136569475098495236893874263940211833712023900560315027112707598951189128708676680453053237266877991628605990547795398610189425676221521890005475865691476658516528868943013040136393277616999064095387206088054092929704412478227444176684217696918586983760346589229898058982215782673442793890595945421346818746917919444886523333803590010004046898323067277996260933605069880670080288909341237309066481852255523735167625608178845681410777300627743693800465290637021386303538624448446438511598858859192234608532223420742552174672333366609947193460937247900959059106982827483427995593736232545955559644854682511574213902418993384850843336241240590885818818410200053852279389486218390260710284229484981586460227802858504615252154094345743528262527318366069486948239375595728231698042732963707832088275721183379169661551742332526166689537282571635558626915273356024202997830444817917253939031938959806116414433664361524557059383119965748575136764711890901718620061969149632865279730168438882929453926023015198182881080801005826593868812092603176409669714449022700606587677613153448038806676945123817092915887026539494226295763527959861354031495275154033472535666125789467948203964690989647655637553800889067692745259802584884881480743358544062276938956553994832018168828156021098404140580037130994733111435272616785873260119072654854277803406693451369750396461155438619025745654861428380492780312105891316436245065504319991054820725008124601899788795089596913223407741531316848924918837372706358162486887702914163683505778636980386447952653070958792524682502197327482366942241158631252424671895491762789564355287786844343628766128847244032973390368750544191474889748220865139274480824933375747725719380851917006448239566853797828501563793422370073388883508655754188933515834191252752835755957654513166834629677130552012554666385607608582562581036206328841311920766785594152591779394105181805611546260673886622695444908181708383791156030886022089833380303787363242239794937847058045667710100660844725511805206557539728940012315421457294164291005569569248453020825039367959427375517162693517776345015582872762186052319710680008393032429337589028745759377899551253335356181928898964718485975440441037169435583572675194727387211750051120231061240854975540572258708594473109674752796654181300732975315208958835015685495914569117478892581910720606152233984074699490831997069798712305738784555283727074828339091029600581666562462819344421848722387825730176472865633855093565966062693520240370954328812162377173477170589636965373401569604022551717791814240455727020429193217222316304497852377446103421049618520232333053225554028926502859890357999854077545849579892834903425631153911333909225518444549098750566070878820603559378387092191952231115426801148081397521892876575236174883041180719078072635094851173261540369975773924661160170488288236022154828205016296484541811437609565035547829063046411243139855869256589770897122681766607192472865531661073715110505531840593301931313148148964807827067868336840895745499090955875566941303106463997584800404482294137650388208517863175821191467021860247745830834185241445817263331740816582527322526014875629401132596814376644491823777614460204454040914167195014876343261320954280556015804114473855031014629474756518995055607608989325697928977373281241681470237251776906557157258815030005319456394245458488793560291478893056327017965392704061532879756486807145887937725186507273172380255158917449647404325665784482148480451068794728717013648365964924789563586124231181672626445195636385289876086176802089919000201896028765392733899421052233516337823301336395877213618856777437908531598317133615620135328242333180496855913076027886538632038882935920123622718079125900700369991037284000400730635217748968077666794071776319606297097598160556084458773832896913916882715145097787120326712276140710828574681319975574788039649859102432722005895378618411965245751251979210130257131400510725270142126087409280916830339430706917014279738835338074315763729995910595237655783938077671546578839994292800671975540695271478030731471352288369480032661481179980247415623795853571256243063869441458246704513488317431289945948797096893607031422859963974629754729505154135394528628009648413198699560410732394158380790415605046299798416376214590556683014884640360600137327856508106340187250926148623587764394729034540687003996132708078453959875836240443910642179249572160902277134893959783700145793619914267063091374270719864731872647615468865726856527734745814950765728550757247706178462892216105143177573658669402058814043651613444554881930189209848932638113184923470317032923887607658827186327785533273006356520730510417629048328405537429377500817561375260554261343894532483424906267520628481163328716682564014445294007462864233100267446760262794091969101070789644147955970526881751105520904457555555619161729478130223617154088770834185288225022805032721007341208422426868562336319046163612265145032153493580923311100216629614466038780561188979345809546544661699261308167643204840993219031198572593153215710080661392282792242847576094109853953274791308336773150039713079160966512738381452105882903070041399825151730503257368973909425409210613961524930566145377523768651891966843579546371846563642301313111004218539624148759720696639502768852049033487325495252992415341461556916163917231481918320163227340277496338204013015497118071921554599190389012481751509779724749934819818475964781537191430837955117541666309482706115158045779596319098637376370755263685284040544975398950268668333682840471098564499221408888048921818371677307654846230903616018320292091862130045395873595894949037881767583489137710119373955348226623685429244966861114187123632419126076161459021536440279551174196612901696418944678426534416899476072061238767061826311056762561318264396914624324189350190076755514299286927237956524595013020652054738081368155449828406513291663529759253419021504011863816985624108424948747372055476737385792793332516204769458411049728135413451422310082941439708376356509505867841504583990242978106755270453686281097103753913025832768095415295815991319632707217989648963355387300756240897117166951590817904549811131099576293459376908616251466186855229616883556376435178373210849347735396182377321441651481007999776727181301840215776685209837632049597815287687272684075212109787509713965749999075699212444288441984371654499916035036906658158857161954175393683636513664030457608464692148134405672096705039500103370076186879546265528800221756505508221486155598725082065707406122190692279527485612111999393016228371920160610103335973300921514917972405123596249122599711192461058765718269826478969613842335227226430086247505154515066458989950268953368079255517308202575170281976475887989796137015196959562225019319974304180489895700147428807978461186657825259652132142783264477965319771973374173263044693684532722632883335822203892696420238928478501883775406103961118803310126912145534132146167581961809974383482498061177070038286174411122240155101755792866924339893839547822574794870836256401445525893679944833914466918652083303032323657479065951134122861170860682080726967187997397196597594194662826880473613413314527778893170093767151799278521396666844470850223619195848015774279516668638606124954659934657648727657698955119021696453273747225038915750326837579879141399583580109888466469675879360223852081223042780922126518153377163793076995331542882214448172681064501871244655005755231302990361849917235516913652076246491702301650380618631612056156091898487405159139651592554870680537876117826537509271390051539660651558201523234664505122510895028100502311982377060313736625633320546185712229923138351567658898441161263445608633135103887728785190629884353019636528288796012853977881576404599951657735702801557323553864696128062772974791036203454395291680433095217470823244496013063945397595138251177856320897437678642927237414826863730588983072556768327903923167941455215858163378356503623816013287411027095767612647858548099921879972099474254573492763317471755523344694155521618519800040574130074241141401882808122292485175538878762863117011454612864418630122390567972706128390216212254632230226906175783835018108197608611871452885958200273765124677179192255161585545575257021845787633400520214029230854333991882219541354220640399076502522561382770109438853284906938529302952041051139717225734662327892489019816212534974215704344814506877241656920091530504608468597893057379488368057611836682555300141521466579119378492593494308980551678193185588642856045055522957228395246709996137213854191299571950328138198186761983124023458126777248289282368002122934453341994502819862604447169028530729226396786485882538275958422742610689390324586785779469994153845974845339638134960821314120962836746964341688785335184776393796705391315004132937054416923011723792916647676334619908621678795572510426866670038685516659928651717404957365936007718086309539535843726389002338430721202514268058703751647294712802935637772752939932819658408107249162418942818584399562500664559784650675019872060704872880826391701770147646670820445447680580420699274549566923601985862551359313032627217275974651141322866872040771765852899801787433722900015865322131617445982303941603592301124083512330375932527949244619260569463923906162388186417047166058740218096779879741328315125076520709236125472232672478052842529445298687436309219863172169364396350995732689036372747550718577139569683804546439848821222360012598451102741957201950744895783208399506439683779188303912217175390567111444271110920175077953229897088484811677388175463968970800781944787703915986677835670153776423142626311460659276923912468652906841477712827082548986078816480521663989525789723915880303076070060253117474255078492413474533163984675477297883122671351085951483004764754240767009436926144241371255109684293591854060091311134193291196552298514651400161565487090826135040599642278672711509593720788630327320523803092348168581315391496294544293592576383755137395289498780572218093722052103577159090958412271215210735918850660100707293042379151001968598553388069929988816588176265298595891669794906519585575418969933659531923385616385433155471198643083914544051614042767839677429537922003268654510203090556466447261128332724911004981637241525087290071364050348919337270923115057761786902653133667700661023405281428553549266523087913197071136264616771804697208288197619469328155602116461702676790184152097393807042140568485163332716423100105097957373552202705997316155499754338266420102862423119607128974164596097834323201036324706403367290875928072375076837980418335308849726160772018564857103318304317037894001895942069311828414954605669632090635327060313189153518091688799202893150711140304945227788289217771417009118393638005901141490244957858407476803712311756425319900087431313980105612768317565223623362821437656021426204961697318491268835563384169355783553438369514754478122358146487228957213715942337914835558718904502345865092966179889293226991446067159655860688756741453071309494082285030858265201771834563949161331624209812146352679882807642020141915016238009474259284151554660901108877945703094466914234292108843158332287022255233659139806848985164183592056670656801552885374357205734242296013644499069871066954007818067167223301879241859648740789616860152918929372728891417614344469708690551065760608733070496925315655129277175695798353581815985423800664504060957551898669000879198605243593716883533643380233276019669160079416607586104355661913764735128777445541581193115602643853599399900289190557949547782382451784794139574324659520034474877002080833552895404722051754204004514213350803825836870699143235968646339040722287596129289346294748956071703925673739217917631701301701204764623025984177726538334293102252147300444532991725703398614706809640972916805226045928190045847998386224328550123967980062583134329118056586078448225474220637476160305952370927586054031627990058386647003817372844622516263411742833422490482967910036133402812049637610695898066189993491669411929237915016191038890911860262944124036604162455183995955645348769632187183542426102752395596108887525652814986610198719311957011754719371081700838122750265233341138845269773198959472066896540961783417415413606540094007401384043712249547087797972816686852539992943553289140524511071465289825815533792775890028000091217487212681151042357232086647595300186814371290610021311645459974640774604044381425394975638498891599937494515559735440070606100598085298310601764011321830555400021251781809513298404232936575277757687430847221939934161949475368208819654770687466771106696369029585199878849749693223828989314184937675673797703322573517858837203649450668439925789278741790923869708157616155595990064440242010737076902210426617854533917715038038655583635592324216779889532818547504281195320398094262262671649600499703967495236753952896708555362938931414690488679503506727365682257673278095614508640334503517768972990064270969329053014967627282136678947298179018683368341564801076447590964411068934385226465996688590181566087875047016179114513623135659212472282510807168526552699540742557482481947556527780714690418479531045259427581276569137156561057648462505581421392961561622553744278570715342917068636378160404125002931531512460648084751743951442592580253570295332344139630542760850726554651887358724254373273288020255774618804195400974447547813351866677775877357530790137405485275777953442014889592281420526477816061789565364470948842586545390985216534735751808788758955645471586119602908246292734114435581174513782665036389162179495178391522565965853986502305232837567461120959596458794363719323388574178145726457550937634623685651938223857047942222905464363672791202938354411537763906878232160532022659449548541913328628761459772232886896423153140903059401204261670072234958065502269629896505721965962577070534311927433191688191649439804720546340802535934085593959575803338997285702377016582837262530604432980799041190425377709655377302288289783457084248486447316361302347734694388576262792149367847953842368143645210566249148498685704196861964801164328865245795112973365111934885005481095776947947760722572824477339996543755609381248009472166623028529103320142741413835826856885714199040065451317692164582334428240205268625825100358976030404355460749038610526620223040365777497551387611651163382872398133333895335371952138233510987449658049282525747733171651101215850958209008186479743564480983547468643006187279565810481095418313679536480375912764158045815206793635998941446430480778457592836739134886249435467335398389011099140212644828526434491553335580660192200031725521626556193421276738351562180120281127441932709658114872008687640962634318159872149258821844688673623451741702762326485730630882467194071076156516350751483342806684350318434445256817576250504568076748563614409353694180572022224656079578884442052056526723190855022375006862289826938837662752495262236861521844368293406954222622171000154943037149326382946746315051446428143618164702959240235791869413879838289441204693410864262786950595310215799447967512972641541199241616750045794377500514500300540097164558530370918044315809390301441277049192653710075053203079831443984508089564627069057063496475381218621619453059422990303351699747617341931009797369740866306092255936606907020986229055306148567031676687761334680347534718944227066856093959237380393898063135973587694707727495949897995810107435458804887036374438213164054076873112565643760199880630388467308791117715541365823100641685305868240007199918293584977031163066164856913560451771051718808481483772865279620236150064514352868663952416383177975309281533220587383060547976791875197691991916119162693795561165526292702277705423387566547506875976145896601392489975222005349702459230757525194223526083490823146582822888152464727478269076476764257402722415872711065828237120134966720782126307332207477876766015107298211220865386554848948951181505018489618368055502978776384457024710659758481271705293699183773566075892905906266306506704750468468440034185551786329263397677510315513452013063865694514137885807093976737722094435333707430570071231981636323220274349455506372770565283275572550393899966505080628653880892914575599616093484248105341741576326046165904979136474074881195792150448478501818106768852398341388071805815998398314220476234772621055877732046463596243249809076714268120743131591314142447552658076297525813425580453160845940557859450173862536571380858519983608820642226150516792470010783881712185312961235052646064394320880879837224149189625275353507633832689586304780258355862976528191300469994890125905595684049678679165903235412529506031351299866919078677203162700005151515556566058802102733910052985361792244943492366816388863770760899331917744783526533168343214530122130221743677173439316823970934212605787766819313996907355400880725546958661047642943190816806377878196290388426062976036404778805586408861568581239251855791201963635386731822473333039969225833709261531135153906311978478121342948860994592977857417631656811871714829114236968798338150387630113014035930412947922449689153309574633656620010716993450427325398595501812281352687861106227887906664249611742425313821147275548672079721796393609265316393946744831657494592052490699092661207501768343636421122199436544248558421899159871409655569415164206138081790259249731500903903731431313500000947625584024706218988584547800163885576699257576478677539524428878645531701757351994555598179766032416950412436821910155267160321883965362397328678459233315348600056136714857523113333165122495814604984583203574157990511674004436645384286812398033183086051158329273624003777981134607529912031749730743723986000911965824038220713892552444613447964889710148696088121544972443575077549903909325999977264593064467492130471450484575023055095194372214735220571679161886469817327203428495324585185328627210741210303414008576645343814748350699029833755295340483784928473877405545053727209342985447278160717557165185316945380445581166831822493988165648357993030027664671069832205702514971265276267907874628153689097034152431931273226192354467119750009989350075286788607355287080867649167262088268277155119895985951579174064020941642809510355197613670463478119480552641620992197375293854803971611097481789670821264828735226445221277338408170898247489214664572575756802100129466901399441779280274121679728702202073377280350997244859004925723504937736124937975783198076089525038082356228721641178664583649298844701900080101957587753557965927012404200135470233098948909336536166863454330788280690319863174889733054721513144951609130772734293269570221132533546354216887843599714984812135550244933626390199395177793708173574690369804948040350872651457651534341600074516407079949326279242297659062842059602577029993305750202524458213794553119492052728623417847871483677314335426926013712906242948591865587005090749613622723334497747012074861935773681172662895428781922491402931766401008117754464866599832181638049180535190139532921287329891676266595277773528428381598622905542074252049389982814005891953050523556320036321713842278006857095893872582229670089318071542366338351539483940357408741660155134294558806458969487479713350540177049916439935087445466052823335004296857099177552757806759341214987413158734545538388910468974206063385244772857541467832621669305621764316859302879262978703542242847680343472278969910415564796416318696135451427424276296691836005350630231213632977672226741400308720555731782125710829398455408955046165903698640065991349058960402230405448160878529296469208908048135882001195986631757164501075756794320653900531934279639151727629669783774372558453654167399405121934783735505230786576042246541864036515095999317270948092805711150760605502703806772577171158801777583122130948656390128834048017056457868229113867363164395879776187606468423716010166425317539156152577670048930634771282065217441465737752858793463274180821813462101858259134655317813784576377804577508579064098926396554579779022377538485345459167352546169035961766675879130258342300056380908280359197589529994021835067732200972458064651982301710606753609114411742286182805241873510986926740163105632341881850989912078591830068473018140061554108168849223110009482622411566048690766193966104450349986911163914154745196046252991570789088107399597554251080907931577257198324616089269210075817159212559791013624757123383704361336860312664875875050030332619062615832802243733477707048258332996239291497514124200040093911700017309508033179626842895031695537687253018431426538388287710235992550838024014145094524513976913179897203411460894014801761386864758183195843684141294474811713555672834213922721919598197093589424811628885386588492238184815356938404012327316606372153114248329200800094808718720522441332570303165763973433773871524984324237820106029534027241959797611164001856737226092703408234078665349016767307429723855582490507048290050971870367230675324619708882073308961849387326373771530416805433109102074211328029918004381461899760669446099502191167159788310870820862464838549897917578334742394025538093001526928855012132115110677477335766026783019535207181223797863457256354553755273720624807598930807954910712075431211650594150367467683641239799718224685747409274502294956817999453853451223628706428983464619797236283888547517482049089608787373500945211633833025397074835465189843393234751279617573586491208085665464158191864762706352121566655722141104261397204557565997925647384437034477860583750069034597872098020960337564487957057108809715329013039355205202216137707022490777181695907180147626025881621014103074579221826505817744405666657978624610275535183730606881937103757682803889413098245867170243118265203435779270358655496673295698710455382741753578314992851175294295449673425712996608121869686403371176872167118135121738712225367650149326096711122968973468210239330222743713541746357895337412917030352734193135152792120306738163499368569183716282332196348139306301558394455442939364437619254802167168837926718993105982560897092901539730021226703904105436023658417083663717636746974368298899283949427839075667664766589789377243681368363499272948500907818644560651443847373030068389921143098940612273156954282100510616913874108205724245704987193447645778190525157754028940594691595044208410612994740468861403505767700252521727257780569897447432735682914744662220132216493969173052816639754739242127425500796852820673154380014959471828085772793200502755251566188959490740783034406224940651451312274108389891641001360079060542916130589161157289959299715086752353944161074012004564429475891564288913802566100055462107816848139763381703980949115650301180039889608844096794306083326325764670840916406075972849448250478710834302976188489910222288564140650050623893814329227549586171574464459433261472457368926417684558885296027369282119497472489056715215858872989246869189883262331290575125877283771746046982106696399093635674816843546701926194956880027482887329133872515947381427820377561480027059339035322572792308496481533314890710475231399930284037328134401978763618055967123087307326783140634352561992306249133569796719976200117875936657108527451535681943362656343858585867752607616400529099692366694158866194459645402236826060450912737180835151522015330604304793041972937892240378735490476960230426728417337058299385355579935970862594497086664164756529482530447761879630523077900143991036768858769687117339364939516656793521639553961594118053757472450795464732939729039677201348701986244903189799890140829369136302928491422367113110263949869068493806337604917102413970608451792784949086175638318100712906927503876981504251222696150318702387291050463605836625831693878792439569182090146542967306564162141479841095658161341125130725730978918801757074392655729502940941157036326691717417160522064082946409849229005113109195550642786117670527786203772869059074269202631816043041298426778429446330075681200372564786966435106293662420732065138111598941902867714876464667376651976134750316407454065963862678570459432668024042827188490177434853595594594003414484131837765564425724845190998669309210093290818881639015333622322652627105692128189427113073109777872605617617252116421447807518682973920136505520620102267859588401912337117252550917281776091055591210643241666346368961025785818772786350912088461730228181379552786640829361277874100629331757103460485617109330610262359684281363360939613516855028271356870478769278755394760753570070448672211995140666580452111162222765365431277377699141173612849066501388884026077823021998403812937317574203890428754462790841429251001630661933735913634080887322155114204472349929560724179947198844638491056898800038340153904486183187743062608181158410573964529553047859176758886388896164230451765743654128671139100533775790382765474265894970182492448044546364740117142427354762471244886356915045360826823508078697185340101586941855495387698474597748757878428911367272702261147014982216884058901437086309871864300440105971105727984556855652553750517226755089647006650111201180140893404109496581636052935878227022799770073810505650316164889617295962061837275974725742592704951026046892643926721522604956744201384708804249996889418113620682536608510724866986513639575091982691741457666812651647176678270402009331217179353153340523443462276074496995231596928890887170208371772499077953993553638655628325935347964925252593191029171301775342033936006559584190936708443924931138021313153718758907762770429793804988617549411812312652717488045301223472395349198582327971283289171459853097115991879109474493786616276677598619002938423016509963690443547271255933757701374649037521216836588878607428994263677188225518257609082690345240541666481672918486866974502696901844167710058163056996891287941572620135424920403282866222990849755075867608012879174143910102033725924425033981288856754403315739176666904870421761908734696378400950618254936256464621222742611671504770910579581148303746934030256145586988590584471480191107053049016998803571684622691221143922744030386798433283229057055153313697167710043737032251856513723608364891325159614987163851627360875297455358733201835893844811482646737020315772757404322796169294958044516350230903629898494825398500959135908332801835653631391250563314453378344611513370470291681049818482060596681813128434580142279455452127248247742026894524474378675840934757563377133177786620032229058185319357439685585892912084111734328895556775985808826242946518765605243256887011930467979912026535535646982862244133741414728116949936219509674934680010331482607886064688191901571851144944216317770944767532277611371811585972525799491221045757326611538127304034355902154333689860012803284666500435304501740663867344432993573056678033107884496460601671669451530841258873216674559724787885505798405812748239099209702520359114967719837515862988923836700408608360213718791749289994309876320637902816422122708434147552302537120755444693738889149504096218464549881705479729718419157450692191907437562112573861588174269708808045942440525528734800504052895901083289685546214995732187888757879575320998886814672682533059680967255207114640875476243050495823255390830951806762201886571341223716427676958730427747969797028204254501017730314494226388511230315029058727363690541351009832273909722260843130816912944437972722089978486998266564136534553802310359585681748329947694818055757362293994876318248468482694872077396674077192700352727485285368936065577770951494230630216799411764464456666106195662521382328804564756762330862490695361183106936636706301438496019533008919685174728438765354582347413736990334460677406076058650072638965138825731142010675807278396649485004412499621541887800646746697261812933183296840637292715913267408836687468980254944083115315202986151434953886392485409471220957440702662936645270750256962159704542667880417738779334867536207842790384975244803717069761805827171888064012114636026270004936829915169437930862885583855960880667511592448462734229307843077865535974972348898522894970085757175542474168291196988151674254872122144810548285467448555644355743087117570934486475726476913132943406342173032716481762635008875987387165211411640171697450294058362493661262228735027045107008328404025363520521530457081361453567527066124819256446366075351118352757634997944371308834916772242246903798305139846024235782277858644889554711483126151072045771199747871337067589909013613510338988882842036461489186540888011098657006727944580954327496169229566965517756000272801621056002450962688882521746723078492087952106231096292245224250435565906466181532496617027200843666791082682178172160010183092577279654481912171290559680182215575907267926648360777169181770399815939451412302954847319215984983150570274230740028663135509583774176988168580533006437507728696993143590149065697068527957298980622937771760157115820459441951608047349779262411994024440721886598367206531155864131777942128303195888927113942148387705589238913344681311209897797482277552257649454382157523075249976292653803875032780202172778896342828084957803301964990058234777213943597169455079369190470173543629873860023805028117034270681439764100759494881149049168904949854468502020991948264277984302691979183258985959076774052942302114015980621319536648133468602862771374636682741634036012973580561895918081167238876310961412219371392992544705919372006664958245350444895595402860649258471789789864572089166631470151461947348162331202692081073379843502593100757884530943997105791744741993693580984505702903868615591570991710906791200559518921071172232752794153324138054941205839335634847113020824437080713145173056239391088726859339044265757965141902466354289563841040601873580178989246440929799176474994872141942032646715362119741825937558434884465280105496700377382929131956450619681456883387737269591897403346724647488153122566863517945435920805540293564056622823525074415774742973612623227504989434226794909104340690623166914160565500310084190280621589985388751760385662901268918085288583646797536554083668481896568893921179654594719593945733513557504655748633706209005237255327257048509887798097347472342119157671862964066896013611254395643634650254733386807084301451795295056113537284298329572998371430504939234027553247032286924498044718907521499610274321553980876488720909105253060658954483231979469060772648284746363136433867898219076741472507273267011392293765177259275463333696718919991789021457571669813035456616647779718305167713375497080973284620295675223343512228486653421564933300498284239912190101012188601955054775562979595581859245083873940135588033803896906693254323852907646636448996350844629980426176176930747031659579885915311392788446573399717521067045251733336949278516788974866696424208355033209462338877823529807614878300055958346616919544277049846962697305658266493826188172102882555667165881126233015829467689819074910388754983191557057385284492979212269174624912030277549056963217904181079030944738449465251549190882966774492023291374685588823696097938062152517251283935673183445505003759608959069848103882925121308634026449922311635977103096868940968849567087710238628806328518427678991728044475437367190255670135212620993288962204043623085409988799729103028051579657220874864698225892399279552405047220933583956255436212816918941459344401288084156886299015229624596543258849512390631570171729892591923439737384456921324716430751671583567381669751749833399407414094215099356673175338237733830029110849619884992999393718231447093524671479750290701635255294271566154361361129973751982845784918548368478014398284989663899159565942293559420754427100253321469171412849260186095631158396941154801554689871529201813094868891579404207260661617286488873152443489482374739951519305285099547373484727849164187002751135603681569606065803308270946592625646652013583571217516063991240696922104125996505794483225097930365277027216461290565742048214044766625842489828118585789027243936746131899749446625050928903613791991258000561202902370322021081678820507612730476019113976260902646333780138362607452463309220613932848444729808251641275720593832639669592579837261346689923599386376395019091639279738270219788375490818210776123801849266356886094697997387071799802621347849730328568270852274190591355968948693414937948453204334257346834632355545100645009481155271906289461690312836588568567497634274811369331089523013397214095787385026523000613690072249553589693482611393752964543969705216562041604377441255161472202455374663832771124574125117652435043435759556377851658754894160361648006732329131212652846221128988839961340365248892058487112371703330517256038733580084499030119071229298656725875776609415034477919174303078961739806780013326035297551092359457496726532312829950517190939375293003428647951707070594221458973295396496332746866493292409954689600777582984883533363107874368826829090626085524646218693572579175126049765279238383589453557043191289955924144271047796223709228186190657084631435246657352942184248393439998316373342717235973734862401149900334985807500418649261117943769759433399120596598416816458956400063017488160628365531326719690877901355293521256548758395833872098760773401898793232550567896275563065422028953677743355706893449305184217516102151140340454304804494678548150751988473755218033432754651920583524609161148314103399439282307118003272651062719916215617793364751804603433839075450912926254707572918985370742978547452290958157458766406593230776926043105507407790734820490883363860079542737772986324074151832552448847797973165472058729968354467617215518040813528720464731112590861439842446033684156666220958322789905204632308698749210450908383425316052616171136768915200735704310423993761100669088204667946344148582398578764460519523334155490578826226438702594326417676153209100063169014207466873649411043559846374892269249191377876083811900611316235455305336085054680554011398035800027995471308067094045031495224630184522786579389225535128375746566533608049683791480443179413815399986809018484926988031006951287132451032313998722432219555982007336824654723862201188146097898399780031961215127586781787803342659935127418213842662770839640861948952568789576628228340402270735213337820006407744051460005513591374031093031016428228824032662298856466792685163340388787393469683678236133718083236800824362955578005697167129709706459544237596556995923845058397133516434856865856021914890291937829137794430906994697547084162803392667249778397506494978579130873394067046298837306797446729264066935875204745571955041659630141820774806469649561111588050298823809169507442673255196229088683404361246194297429409254679068919476129598983053358616990406769727634699121036158636449179616082895454957715223102966817362808945992028920856272850729125332201296416180554126584150880024006474825994033149806852557164136065921673389469860296814057711764531867739138437469498666780999148078136953861901195535213612895261138735196548436185478229741213357295268096176511188604513473509630635991051107583043047584518746378398293377627430484786118133627279544779176909828177382628540603447320872122547347148956436818962380097554437389144557711338311968566178559964334289314213645317846468727999423325444358878079866721660043606623455789475758888436832112671915867116568036774515068862895242375641149406811207553606815235590673086679074232245400189920051119218941944018280990492688534537522914442001028768072186840120983972992949543204042813939802292603521365746411849895243090382658873830395465271219498716354486356207196594056148253371690439610923139766755328959138337845603416876754878003066721984294720519053479461604345423115928157344634182958927515477868511441130816007571278998098297503375048944196317799634202380744140345378977475507218839922525772925003099349984720087965316342013347734776691519324876651807867149813285882895174814242199625801789704511014948316903232011763195184778142643738850444119383056942014385207345235896171484261448124328523251664429073352964297110692706351017671049693478566132604472734564985959140805482568051066580077708767282832674705639965113121413404251298828088769287362806119025464079545112601975347892125304003178415674357206528402199792510128536137992557744742791065894735627553015116521659646000566831017222296325197118319784580064801706778969888500451484128218821415286037107054575984849522102563566112661272484858377727118935411089656304719320275784945003436037580013197253315839614774022117175568334217125290495473176672945547542706632291288105207582568720014607683434585514935173218259273950483351660059034844946318884714416808860720943792676297716043897966809133835292966840583629113293838771441077065209810011164220169883063375724854570645096872366467972375635583604178763548670819374615881676066464356087978489761674968356974519605189698054502657130800394566359106136614102274613121216593414829704379431057040106980304772926115801742342648670740359932747909423674531835558980674203227286414249989216564404361999769598474984220932824437003822788840970416823894477227769436492423239513874609494636778275210157423956058787535927632146152060183048130519682577569263178538649480783509183058697606668975977692711526600367240705372097963290871087910549207862698917673351235229641244900952502686749226640922520104767608738517021553918978492395713504182359082439866588938106482219901722464592248550716344452082169584758602875479795977537627450708873462686893515158050821616061707790751325705570708691916146145724076509157698520505668922073390319558740851698236293783038364364975143533698042519905830282598339513801785189959948781758013684410090856341330336126880996614151728927778051697385569142828920875286523824254955674168447563919944356590307565256049547705862758920959202039371090738750984189460835002209130287590857576807567459889441091454899487557607253680592040250496972504046581087621719894385141876178159071702123558657443805367734773924142950255283633708389736864193423217345295047338890742234387621830283160407720327252519209206200761350264675774656593584971278844945710400691516955646196226351361457828041719174307588447127787672070574641548867127776722940126270942115011175410600281354971144084303828400401930008746374531661058367312980127992228716628926164259547072710272582706963884685471318848680948747580464084244012114918140090468831414829621680944706485488204020778902380808454866637486038540491131096755539666259726751877668268607740200076863231143334661870975225653421150191614944970208416778527183007452700860486281811468403518402773642196323574104916412029172011688180511791742139914727785955480028314810420879731090528874561049728422472771171060776482431010517553633963797883409987247883611062035781146221298508723083422985672956698074253304864343074234923018742105429112883351636163093465092893990952795332864033848331801420955641909911019026263734499083345470249752449033405506114862025356594208397199648630210155006117871880592995472629598598641045552721862966208812018629073980422843682683618491624880544233943720689242996835323671922659482512888214887441056350084738145229682871084386845903517127949908536561808285932785376438291189731465524456137588104710925222234739735913762866285664498261200278548811015069678563988514347305605332056394483379618483997334180930649934053986592013843718062238611280094600809928518101823975222621232706014617432488512035476128436527159068555885929431267851900031742920384233914205774504027922027627788450367742561807890800987442419493857202447453075816638554122927837936092580219968184768316341752425781591890196383376811678539682839659803724453875534865017754048821263989447973570953623608673433422979984375296333200985701473110354287613208594715495760378427893531650111974294769222277467664609161682295068989179643734858800448870732722223487850902932596389327060767502068995422643147067917658521119719816765756596241055251783000615158456105346090601477235215024256067458196799526656658129793879013055748938691262882686253962033242504935264491353557136567070464217698608156087776364671016142417390050841920833391684726754397857530039961389496591987404900375701583114989798524100762924644712239002304152999104098306826129880823928278408362669417707644351245226829712226929568188022929842889855008314054836504041922272998401956831479184030584875082510681995202167709038006725435422130089713330849398940814197204477093430127985156540882486372589923415548348573097404502931264475695097629436679224923196314954609874697256059996769423381670536693209162794729403523968608683316938557367762364768290015826461706223447916552192550246161945527111482199918090892146738757818725644347000776973081899710707925698707068092092027065685682603658864030276961804081143419390519899302221151489531172637719543329542194128294995280520062638531676601784141080415398588581307958048402166801553640436889367035006438838918364078566081270394037243876939794877088841977650412768623414963815707585718011212142664521994906776856242288016035828224548181135615797819630184138938971506204959357571199147358417346473384455765204312586449716144840454776524511830972898454420779415871132701154605048584653031849013060477045175988600168390399619946293241368799053949912831468473339503190695023600895463992755143190432901166287704767051848494848710444994958062891383944673770370023064488750139956982517194047239533621545607770044715687888772806900564503644507105237120793481851956187835867375830389676063936886550903136829853880317411584114546493222432950127370617931590785076994075337299414437142648263205718658614696861777503388073416440981931739236706464899358005380930027724775618616514648083703545395933568692225997538496935121634824143288086590538306041114160665810217575529973476420284214580967635546413954423559203081751220579175276868435643921683447525718024327849969101567674208881519785719929636665587463023219301405313524238093373567197063419752270108334228338574226508728873151698613881372272324987844031555770776923302408465429024762458667132184614815040931057008045384190321541151766398488700041116632591196496914659535926391061554387668952882985806248967057358734223880509075043776438724208808153190908498395727178489817321195387461713247092883861809750064318203041164852936508106065116999310567191325511315239440157191638378907769366982752858154050272482488196605464570363359736003298863075939582597587048968126200922341260235624192023706915037256356215505639090105602730334437930641720378515413080030234422992026640514148232342412547654086112560931417323651749178364721862716316742884002303280759450408278491349075363360240605071218709459993277877903550969113493330921699367642302878878695714522063972316534341029497037018414356540383155751147735787613887892479744386681189956655901365158437737592861285442762340795218349800931964076863599249500041812985009426988970686174591725438420937824504900776984762712921532723293306044330647212892808762431950803134965122206633628126892261830261645317163906653558067024242206108703861340950526505398395050934942271061817890908344305406313562577559531831948309683316626243893352879012807946690199004237005641598712950736880616506409307326383547635682543939017373172924177887809236679512842665555467936783558037017525532696547205539856965248170381006617523762737371153599513168163227574910677771539942036306898748531393114504225359069912973451781881948375496910156550939802009569742515558641174391496597366264498993503721182335645600193969825562202368356624655809066862368117749278212915907243290396045548783681688758692281088353724263494429536417447511857046418095467951810193520269514047593331031876247035874136151530254779280738341808398879583341890844327141582232356759489338761372128845671135033632771095084824292272779279376394727292573693461368670704987521090635870493368512929347402449399781462632564162057544213998009166792641773545831379164275315318241560082171250034831426141171331219030231074994979246178803492341566881334197142725864969112645737787712309339994197966738711516906754786299175978684583172963516406319829377953447342216593474485869164991373252130682439921582881129014694665767983627395395724585876084188455228337359643073561583694472736781850863316847986328918025464153920492711543350229587783452006522571311206230635024786561692417149967262189043702287369252236810443002212962184518885419511819552732741953841762346207896906091565880050517888260351378806427819916241020266058848605217320660939921349471777968393267992183588959510919349272669234389140247851381752387396755932155289604910607383246496813978668859486176087413949433477800699457477246666415988494557053447338876473743743103567291174525783015395993416314111898264731905137236200982973137107795627458723607702695095937691378257534486253476762401546512694800033784177931991909078210545776402317162329355273101081810211783928175729113993446881637011588019299421216923274964371955056548186247785871839214861251592689542035395765747823449483023420359641938619146367783570319611419451422231927795710512834244095503433381399585945414473982388727392391558720830104248252174683418932669051389802066551400402400143732688496440603832331777390865869931332451919548516623527729619903078640452951953591140365914855294259256017113052170307085363333124340914347587841006922213895595991695844997368272209718391352408941144790320141424231063868441039398511888134290596190879162258786794754411727082177327352291289640335706538565833498530412598363007472951372162417070378025819256017719114074570515711281870476164591208486358846443950930294311476163167353986937991027447227017630989221440113529879736054654954659189767586050980899724421069094009956195252171928821910305456168767599132236716569770477737508214458069828547423330246924303591661485314892507806831377205362049481612540926411702226387592204432275402362529923765529765350732582456781497451929358501170223255133927437969988523560201217758475991498776540274705624912431750888318509398721521251298701905046347225958726202534290196341020904717057902936079582615099783209098314558761318930777225222968057105699746836894717426299123772378824339570170598459138135519708216480891789077238804499754464771774543921684608944488627609532187533604986877487775364070187281385672269257048040265017626095407903910950968762470035970218818661448798689744697914276858716180013526626790011261038916742975970181974930171150150022678812868762582620706683800649229623007251771370858632959877796133440657760240880280412060966712274229288688594560695969759090734079197106958134059125749166890330878232680905958510991392625899299556660920927357457470535908067436083614228554232143341402962319669471246529256222287300500235709492747646825549210309735891683798867348139389769782075326429038672807898390849762601774023970425596231180025849553463935104713209045165206260407668123224718564382669596705734813032181033459787194281412823462618176746935845811151932783185557504960714259647283208985474028454048248790867888587925934399497131733704611606130173431370871383155134480821069385223856411010290256243804455778552678840132171778813229875366641585831986412147844876127718229128052308130633046668563140433764568407603980050219623598643685286332212493896119763861997942472254940967517533168658557787524784627433981384534382536248817686306947973463379894893740180985943729999785966481786492913224821995405769390197678383248738325577483733451764144803828293939889729951532140403631526128494951552508332090517652698352635170267230697290676009572681670474844467999126526216818186815757562626876059594632504178362445195608853381529228590214570168159037062564490076923851841441300091025188822831193225345056854288130522134060045302488445177875918210877406737393284251680119543357638281391229855720958895284319987432199692392260108857473971336451317033069868175671417418398040688672233955830017860166999808468936595454820964065521176613736512335433318515894744999369792337857183440631134508499699051502632978799834913157989613517695018557495937832904880970342417711276392865279543559290368351741350690545883055225549794824302036853784969086192306453423831961559878452224074705656204434899966668623906830123474621656777401691777216678987705425630185898223934089208951457820654628137959525095780104649457366788837842797090434390568168045138326018439489582006943440407069968721773921921872831795989362202886196481113098757032395779123878008301540875263594748508122386483093150186833687899243083439643429150964049381050512225741174880342040630648735300053119861227396795573543306107569901141107344756036994884330431997039327571289122836414213542556863589222477022748953622725228309919671639672926315996654670723897461646946872553429326507699690248043127141962748252566469143655034392549324265676631003331095563773061419840457497937616870193433266214371702904336638635799453247982364849616881080228952135246726026186614014787556517085083017141257246122164236748589390856150696006880401216439982198571431312047634846250254394861552090949880901919517613877785054998358303672387020756514758255340209746104619144428485989099489081218800624611840343471060453001827863443570788081401275613173255939988022825685770681598154420976631769966268333692722331493750208759025929524891828782686639755959594078190382786590346773389193019898258712405956124555818868511967833436946997939168409276414308448794003258815769818506652761853542553885490160354588857050271152888908091883396498250600972324372706622577298928362785061799544851735660353775013288616331308025729103986853014907741388150870439434944061301510724332524679077162057709529890055352240324038978754801519394033394917957240956534687638292734839740944939606404405286028366512481000478609590875616925641645648354728328353268079573356850878105178218012029388786131976060552423344511958139857277336540371207636553745991690565945972901267026299964253589571521531499069322048591669356285593674330954527552654411569568948342885879563195352968650158672629128459077571184402842892120881112780457989218610571789392904274903707409942369291442377680766143863785894159718330123600735729376356942306404576188464728090137329646477003086238477751483983776325321297548582986143706259468141509440809949085714372401387112821261037031643310342080989247614149780798379234883167015475083768464708733096631368911973975981631043811806149410969330668698344944481983768215028947739695164347137102174478594053338823929847971129269186769745606475480976150634848667608799128664067699802272871058927258603876414124675893503201120731514318680100017532604097904278624963425136734417952573956567129589061328011928034771822628590243511301860778457343317654920736849947318074257262553318470273164875430502382847055719216457124086986708930135650631423154195800949490077160656358013371819129653949241397900839141399108035954771099003062306606741910510897227149885199002201106148552532007453421671637427520836629358205430729051380486670355932461424757478650780800217663915651468386312223620769503759598743926328524524036600220563781182890914642019700403637130688982057862955639764633613339567262856406962067919774788350105992124867057635196214675674619803696356144016157569473188351227032263675336432233391207997800482643111877778148617898920782724086893860353240270175038815861559587566205767082015706142387638459986366728187911402586562527030672666707809303403187847180545191686462014766535523339422511603172067924490467029698662553253349858820469439163775951855289810472685523660740751698408002563384565610163175047569028998252344882150931103986646688862521546119363201120165857241157606633629863843662609587219588150146435986590436245597357438329003527256004703279364855043226222521538700891611957688858786758263621997388628442700229058849013433934835166817940033921310607912195813121818809412229954219768904779333852065736976806696342685247672457079917685256883095745974553886009053087380842792995619327063772689571224352838790923557265788545557705631991216077527489462353966222987064127075041057016043469364061549601282998311194234974130436112087391530315373602195694797814090367050582309708905963108181072716268126315766535559932718521375767814769081960173732216044055331409204065747425030302223113607341814254313252030313241395181685706148488991627335943754395104000243790767245992595023471790285116296384546376138710313496630971978392906154386568064931233349703056606554264059402804253009751999748617201233438499349743802902928674705465792433644205265213192100282674855432490180746069862846410278792885751232063048016620412539059559873078540370119419085748562209790509490089289243885293176828562983328121700415873762776813659283124569435196346125126089161196907926966936481202291415804338234823748648806683204713602691812923885252248687810118815824493289188902267544819284985608673690317239426615358008341146293697969713200910219806307249190548985185011997904803743323179364528024768477622986982608634272197627960852168348928172130481098024579100339576135575112991208123808595976968607129825889868381341841440655752182062802575535853882282088981972719637961441319966863987005781911130599913870953250700220917044733357190385578243129114400409623348575198334897032339516626823142027789381224843448245800687845131927921393203013470331543790449757293464384056602699101806210880210829688524712450944176336355050405858306338720792440198454689218298360754017544259673570801753294226008660835535912445339996084705960510846314910556772778701132196625056575114629343592594674962935990283886353979252878671154636727447283502986057210047686060816194303698959610905981119254519690520006841676303683957605050324061146569412038064077844614467248773055776099516656518845983986780335726508060921172126568847742558950891269508560311180360206411016739595704782689461532680306497702633683663076376350945623665075709395202249790003501179608386021451157076035816159070555892635067050490410403085888034250131838357072174564189737617249165328676421270198844159261776563108361874943991097910808831578582156064821015182291965855502880693105604269106740709092595790127180369703370602857847036390537513137187290819837860302657764127715959122031074468763165822077403036409599428941636522105597031634735366030991456664198891742202466139874031846550276302455573048146090560348676223529441375096965108365809977772548113769584395759889943135349713926823626912441968712585093647911590811219573879259899480134882255004270970420942201165795624843709667220431954515504360749543801963793681730612383825507997215257649752575809520268782969786499479049579373796076621876677430308876715978271866776772809803287422163084269440890378175789176816694983701872698871410518389719118185721022583368751283483844476300684216010765717624286830336433779803537766703367049554358248737154261282592937769055961637589864575063932543353059388756861009404960982490306773790663019201748034861549382758183654172598756904776881538191977108778233679965950117342517524223374749772428976333702880186067539557928806712350111874212311464335867097923221723460670793587428738360147672488557465710906988981242930942650151937354572595664388717994961822720469752062129155705910754555820211135842991685235434334636302470368136501793177823799951361382829283199007754473037261767567975772812607888365713948392504973913507708846998742843589521023577889549311839467844489936338491194507414942461482248126921685426807041219266547568282208937322932033003753494266276617000067143782041518914059756848832251235720601713900446199822355312091652247512221439037764422655247522138852023571474112926246347332948201987859572549094302231172619661864303704307376707618390228056065187384403498576236048280261078133139578391426660249540805644288234302732669133024542026017305024152087442790267460113937479528717499573520725743013771778688284821858460450754710080797521987556726892861333571199406843594596135209773535428132430615991732371812029063150403443748716445486906693845771138245297863754648871151742171011741328184044792518120527176196066607976627215689723147326632496024668877527232772759641194257004571192725813139297034186564369021560384333497521850159748889320273406391498350476239217916878533258751886877032207036660167646113886814474510090401154015202940013977229127230076846944531287937412879182600701057945875335361385555987035232515744563264215697852939774224941561739416872076746229142632273571037327508518138290503052212169953651136788729453895286266082429972062458328222098578295202361207428980896116327902106296826080413447113371190295557929694800385266889652655735462903540092853210973377637587366724805639615444456498214240422835660346669290309462508530127291289757933619127429121242794706270551086108570329001293759742365684351039838551400175795278993085309287612555268897983450775941872536213072777458354457397043341620003448524094155953849674879800653953509815762930409468911824927647548371758063356003949999261793821079030131942229350272547714655154330298200205204887703930469042434452832437444441337953177765922254634970603360119175767526239402773651844432189150781365787644296429004670157322716770522822647584509487890060970883501973610100505427066093399969292441326199928167840874144005323177770201032668255671040135604821974893054958052823664271774265179094103195040822513651802889810163277951171684472857823274779818745357185306771782022303240906434957280417648490438565693754490538441024303969438126635725863566705573751092825580093585985983608363152473642557835887788504197423875421000055325591278816623089704391231317481110310918546297687044776185149906046824694939470404635412023943559804841822811246896296262622751885609920933664837788070028893139067794058520867772525948648300441843093869115190300434714432145051809096120758683703979612562441900158812222881930611708328548273698784674152181641128353766412069569381189519784594375673284794819994036589136717920805919069109910429873927068167061045224195496912954427389848850061173320023298339556418072143497450312345408810013087966768641916596610133078477279717048273008562251696199180926475455963260749193006135575794736883343087877144987898915087592787290595682953594719822143525172415553804897035322245739780485810479398061973362459983821013539479673388866951475403031368612777498321168399545988147824786005470803937107399993707885877845106881256584087502035535010500573900210045118037716176033602132885532104985145330920146327658891133110672526191689103257971391516351356674621034491027477567778104814236651339556017356386758446662149339180629779726816115414854877921906536148236985191248539697552743631827396253468228375268290921976878053267187781274324035146590089221089393483630803361813951301493067637556221680504920244886773946054093359758280155104426647737011903076345269956753683534370543098934933627991076040844955974874093543317853787797752092183919534577038814374693807999509374402688638542298302235411169491474518273357604368900112323906446284389599983336608461745847799489285306850427314999925314226679566030557894560575001358225430924034069011692520245555846727246213138380316917178377451923386927407621323664213115059745251364153896512690938539773861800997367067420353159534015070888471131504943778029675703981265885001520635365288421791057007417175241652538222201965735019448980478699654748370522663607498890937847593449760674309325964375992260644093466355879001442468514447992123995039920910882114536578759954122902442748800788609388134157443249563483243991173080479792592491776038071739688509969906517849055727373130745984825349173495555941999059123912386926899910087853724400186785753033200044999202390473177661976433122838784177301381053666894829495972264526152903999174966805231236640442667643096121665474533795874823653776899469384106030661083624269431282253105459476814729720398404335506071617411801948573286967876055987321746600433599470516042124249724407761567067011138955450034196219132903147046912756976021927103392253560458763853780318616356884750194365864529121357376226229940456616743181390140637502766879860729862470443871347130425698153882558983164923747134779508979001455006316013016502045921428505300000430180541884917767789166971258794303060247789448194078178910807026791689900542023216901000627596643468828244511246352178064033307874834593723463402155118119068557493403330894023388604137109147366698796400977633655201108479180190451718232532023415469767355763321949602701540228035240388208301796684032580348236494784044810683948612746341104706155664126037699625447929444620076474858109040987277032130112640868632927308402390714284053378976835215447188443351827560576436633677573294353696496070451809417457505180576401670117270918872781534172906023185871453908938108737023508270575518773362485267490089169939334130160051437284222258825574504518030992870508615512756832648921755093307816870155647613839794909367150925301767779670019931822636515554436411717390580809327201517753032973884987601759613512293017521693659963206993705390624844372110477230071265715789182429900140718866958875134574848348168787312801324215933890003928900796836665062330876532359152138111232026813538802804243341738125387508453758299724634930489077079153758831162325804731159733786385301055054423083453548759516385152804313010214217851564992670902411116515247855353670899036639840695204489147947856569358359948765078804902124842428943413145313177882620921070465809549006517952943158365688988692251551213089798146612316683677823075540438610580731938590030613372388806434564592930700872757994265642261147186592316779608290572844923624123900305226172955737348002970207455137737935741027174660010820959928153511087850235428349610065024289764520586756645415294650884923691978582235485454894440394469974339399203847648731571478392034491097963138272276781354608642440000940821600388332044834989465871486980394523495938827174645113696231299769500158754823404829346584008779255061458175602495939986076655482280552055959098444910411989192332385944801383846999492961792487194529774511213698832601965029317242013203004198346050132624202519183253216029859173533178480029512959416976318093560448301331430157654284570565556640574524892083884424416336544197837587114496058091309024442329389874610311261288037541788054968536694573500278788530316768454837240670530760837509509297347172443327181448059310319839943916253989093538588820840833163703789669600406230667889217734875561896536726228963102779912233420553023629128504773848870196212386944490068552028326366275298552482035113613562243075751376618195201012525509943276277454458977762955679134124804653356991387189932531281037760497195129897694558891321305766745217830528245384833898536863081711184190695822324756986482664261213364539135847829628451362333111379342323630571404233102521292544528100475871600091630128769735208901200748132219854265706937702225204906350324199957970758471669848546063126876674413766939046205566553083362858242214246080440051012069179242769876573606249586135439598773089499565125649797015138165247338048428070242848938537214053004226071409533391092992464196574718270730321191713821354126151084443896586913723064250788984086561310705448872855036406555625192863962568533555634034169419436689888091946136474258422389213943462831281513322387371051448972753515916385171273445498917668687376821466048543219544718352437033879926867136835913111555071164146102965120035841113481917487987180030902885495821459064979973499867728735623947476283240305952026971899840697075399939516800979678000354847095707813331369672689333260155107048224504303236901745055241207796311958389207850197806200483155678498680921439944641237546701513042976841614523185857255242243795225205080234059324774927465993086747280366510496826494800202657346754600301485605079327025074719192603795099269289485015096726471329227720474079303659075431803159607614314034216955033415574555753713681692999233269160421124917256375050970307811230891706220794207292888671618771909298188993791452850141613115433062525841911843418332428113304052686978836865051056089800589139430279141467706713866355510586608799650579578563046704754713807087252040335705541677899414715235270060440668339482695721457542125606281773126034779861210882409931722391275177205165755110288387595463968990812198820956165609159624719360680405329962070731125349065232778900713972774105727417481941976129643550937245217993977909006186570911778315295972518109431317894428702670892625908257775053154890871615884479355388008430817408861193990490393587319026535863961785520811213135941311433973661620304037019310427535303156957831660342862780540585760562921039553126963622030261901740062489366863450257605254237397030513178275740479726625174795039855958259099484351721226262991966408653492355246638486695904059472050312416568710063856776472221526795396305089409358837843946035824320193377002551676872124269974184453831077295213986028808311089297157404319153431886476633732532520275225641365367070668047157517113967589439058290534462715126396015918720485554916943996537302267089361574374918577718387671286215472338281101489230012328404858315571466202405021280869089411487683151814141197460582531622112667329646100360750175450702477150338109647195261646798490108302226738311344720815395969899984979208332039178263997525472019339903351270525705485645107178716326523789443106663592507370466627351766954738285653838443418443313538664899618613662185098428584759292862513655905795963988399552036064788145531980040332964104765505132838895551511550913094010919356624486616521550012534686694945183773215498162093658047154786878535083547035232073539618839230909938719069599683319137484084339472635119260482592922758037129804343620026921354356951661036086578026202643287206319817080442382937785211580203363014666900613932753727419614186777837482384275272842238290370910589525815178705660328325335082298480540891206201459602749164853788578895151799783111323359241346683678767450442424563202167848393284453050264018144235276160496719564931250668011268892136221849519232302038236663651271676495709669825181420064081288188453765481741561918567442602686875865591619182208659347416130805455886447516271592806291157999541404295949829417003844782857186849495864486735235918983137765521170169324053668681981126660909556828406369609005679016986484999099507391946262318074001002829274773298231389974423460391484359801953191232911147090863469935897092930377749652731770150852964507521020811723764902133808619060906659764637961938303657831586241206883377713533859130001344777643936358184908395210882847573779007624680884878941593706020213958483421032204019422075825998460480424701706832954154838078428848093037750428714901385742551737411448581766258834601080993828029451032858231964346790929292765309057992320370798527522222040250523276325792559272707036784181253115238898972970698866051308802584271621365707344914370910451253216360283439705253164672996509610435925096113584276918999122364500939017936732618376829254642937258446913317692930527177606543004086324357858674990935147868731112564314373623966775983420822484782253224133455672045363787284478815527534148989700219265854674393232743363944949895540053256826997539820243418131737953582553709171201980934355235523979051873869777684670209222885814016571075146462838812382935179901540356016710126127609115994302665883556407508376413057194346330239347560716683239142372027404934562971480793281471985504666918449175625407747597233569095446628124203606146492960765882648586955254968306373706368057372569708987075583366971811342588274505053559186056185984372149766044091210354127882173964353177456175374984094798687336378303740733152165191474253970095562909103726402470023926175691768579082355836092676126087934625630966324625543430818918658670152486618907498370724396030560637788952695145685086132541110703196944134464886550783146884422555819707412335131762870140970184658825082333168848340601896545528394703193092363364537703871689213795388260508495633171301423637936962847901755845428371756136564160899913583218815653358639212161272804024864170938508779902807782206472190814186958690554386040682820925390893544579626790793870292266816231271536020427956782477284737643512054580546334408737715421345259746506403767891183366540069404289920027333052848982118878683734738312132884429099030452865262420433657493282596979829843550126922414291128657437965317999916222181468851231400864123637510302529258290265244194098132421994122206395733066898461747012918432045164014314578356322848734891743022528217022267373039337248634419540622219628784629463468389124171628623311307591165020082860172460971825978525759266224885468513658822826041414486291264337616615105397167239541073847051144202140456833430674060725215159602218818338482165565969922452849218963508048511033244555713828357996833992096024691884548848483214651550068860100198805137149732192344624303058729160096017901673722799340324940890614811757658027196637265003249406424166279667206395880448332451567402449938774707764951219089122296842899038361379379504514769417138960926504942775650203599412556918810285305763354199693101182927214853248959660771597665227875605628036681727073712499401855192669918285280739126249346058144649661955322016465676782112356528414015729159603783408752737548743245619001173790309856251925748217243495017344442546652411740602436666504419555046774680585993708670437980509647700806582644224044843250797006715671464217131069026571695247254967341306803569709625275666365639464678685619277758970471152375501235683361698645099594013046699351428043010709765394568629270473423799218087836347623811347448217788212245771266882277532493951981995565631376625961147069481796279975422299195466077442628731646102747935782559054438825292106782324647155051729791011991599397519185150805590840193944769681813616244757895755512612061489639692928269468709227253774580510486428214071069035352952473307399713492405814670545414269883215321402663763368203689134958421904790850860815724324050383324603601826920106643148176593118079555104434696105181444808364103659446056427917192664025983369702163478401996483405160553754955433991076280304453377223549051176820186619139480937445486414873737919751296942470296785785963636878584815307381893919832711659223153524265954783370646511291475114167049858681948046600667148776729220610069733267408022496593556710360705774300785938306921527571886812233058124017652699912923112791299074021162536890279831537113081326800666272020243089228392598048714755715305219870317764023559459016682854594623887858028148091969438553884485368078140941440454432621282878037983748457762167172751562062700930943407455055081753643622492723625613180714683662264374605115684669602199052633156051844047939107146770770172014407435275440504442249226859238804282518154040417888751287728749343926325025714723507715289919983342443756818922949154183484598189610608156880943880837208192958295415600196810595748959511724642819390112877888716689601667433077127519515092324907203534930434551932259052766578496436114146665999807622121834029399157440634384475876218793325800627977616878875904449439180129500763671207806977400283179329539442233219184498303512397239751952907710471128046396550067268152220810036910469578383055638435673750587794119715505222229915717359590889803630039209918176372572141128937527415200187470220505045071651273496215083975536364955967973651100102359168330317415897138788735347108499892005074748457126705762279604253019615958071560922976294309008168866744601476598831604304088627920252400822143694610182456462475203069721312609262041745071876184420401687480012398366131431744881130041705562198909167480275924623290935250573256495337358304851322389609677983209509873131936149782563320808865841713719444240589180341890504518346343736298652740821989217611735056016256580617614866040399091051470864975732356814672862311022167658247815300305727484744044630243405983230275375998224345407210938946289220606486157642000205816120616259203298040220377265113619959587357882669403248584686137721256146277734257893936348645204002762997122402603516493986932139766685080112852817407433876154650319367407582099977470548173762715557117098982323395957353086751479662259765828200876771812315214006090168866802134132145637908315277654834046173274103841393175743930868344226678212736044982289991644429068571895310611704094790660811660397567337535530280191281060728263583133177579074298145121310082857874661831845602427896205438359523889736180531715932234411826058204736306158264034729835531090233798531639159745476844021529501034871250710882214223245397204413490913681593052326423176722745104458926173586713318247313888560516977716083733660348445973511998083357359332950326108547670710139557745614092244124813863261566669969799370114448716734436754492930067702802203791927182916154187730044795853135058254466353861596587454486927831916249758093419620512215054799422062150667735488477789107328374761144514452494063282580350615486116660513405191922343089489493037826586064570227103878115231665269037523557413614708614140280906847315757233830608570130641724371283376534212777968409770385074611162894303141434189483351582176668446683578756677105838295913549756406750718418414554175519296039627909403006916287541913688210585516578619083050371708200782711130677575085845313826723361339831329193238059498282828188325405037282295370353962232584256401321117702355643169021253463160078459644339955873915531077170517297305172246749416161629207352897264110971673027216502860228727412099195098207853368618149827095137449886689354348058176682610286623553432553070549011054281321124433893522630417374434043402681195793836253531233627020076494792780010723491067636156390503868638281171455395321963237911102079131040921310778248498099255842161395308427951951441118491432245562989705945452702827280458952830568878300550119792948559117460146926307917963696546012082900058590106441326712160697842550722095470289703660823567683430873238715503556617856721266329931144125561605500993378654267753985066896271744327231861581929905589331226623921297361174233946849578503936701628074378285593573204792296673787848537873058930507299136631008770642824540613632278360895998338407054788678983370978265457359536081399088632765643502638013807750291084152520235142516679556883583881285354948906735244201209629804529343260030855710454815874439305780356188344233796743127650327610199126788234000759926945962902789945800004922314144523943939416413148533784367311470781410278261342144432556201884247753155647975641025958186114013029717041515551530436185878161118077689994508171009341742492276579919764675038289134534041437219124602418323382127445917210104577756028690517068928987474585953948700390663109425415815064335920748186714624788001747529178960354333624947260240783608986122797714651427991160568887323837604904530128698086021655306391928086260416251789678221010257413588365259968132264872241157169994020052854270892840168083090791118020068077746299756066614655794697207352725580556448594619659865110273721088040205008213354550163475777843595957359499332425670181693104780610797035424308306427059994298502973192595367147667053051400450308101363988031461803580724653519751588547004303866327485568785970029134484590034381085704105132684316233566925631919821829455758654522843573587816370260779757323562845119105074631892905044628675596212344206225699727341038750623688476988176896177190929892987535000680296322162633990101874337462369354770773215417479106766140642099308983247851109316786657477288438954373088874151521863331114043203490605269615989908928029409354226560801673964050211681334465707714270010765244425385894020539379931952263634784779928073924352842832849897351278100961843232911817040374017801880050628863458845513494021673493750384569538817603149357557583655088973939292194116887946268735862755667535162606887697480926383350435232133002991687315178304675929679386112190314494086273994956647520447521349725082354957949436838370191660631875127098305004244360196056231202838207059181905241751135083503099076571019738237387753312623911462187120304626222963932408655290348429911029341492361005356767366418785738499483432628292294547678386350149872485269954375673071424067811252114763443377964665432622143489670668957994392690630361804362135360693780192503168643826159730058266935853166165194832406614427996962066758725741469005913798708740829966457548190425233367296193010568765648569514654915343960441218309507812768909048961284054965577388888103878137026117631361471994984635425945840439152334520205117714900920035997856125686459090942630199145309590537503319288136779957075150416109443119737725043869008677261545163948984524968296882068541107507649138600252350729027338349462854121187351324644435565442069853421384338644379184472047721800338741613456587329724171107139306224469232940017926374903746962809503337343198371425272679051587925241687769309962019487283263097943014911963030737837428577986578357557437875134259568227119175743952486986514528699920005370054703056612475448852052846025797424525431223056189132360946030740666019547453131734014520432375504940330819083207597347974388007272701451491500259862443074080807328281028051830655208787499520586808315862361809050529010610256976311737247979982265708460172188737793420973261736411567152685887083501701007346437947672428390038726590631545146595515590745280831879345384585251110700563235380688402916354634802434558105008480314119506426436506770870733679435694060747580694341914469704777892743646722389843371419261283662933571471027464799041351266010278654907544052410065124683493476276587725084534772996661791225191745190927705929873030182211217043987062525612063727680857376554151501101816491431318179909373336134779298605794009439667050641223854432568051581776865531142210137049071358237726410047464915324175130932768025180667747826732263446605581153785597313770530731469886622157453888833592281690616108949711287682912273108941081625838126109931189882317674346320149780936793184119145294336687253805694978567660251115597118450248965622668593004388702452775035074584781770891655822828478703991782348497162978332929810056073791672508305391180427337511688133051949087037653729892389509455022034650823373996191058838036640666861701410834408717154777481250209727580726119507857442184746405987691600399096811986669502385072377379293432247688448897643940187627371197494006723282555022326052327831228027390323643125075669211566382468615186347726755728253441684835158927483957804628380301732055025164024041622442881456441986400417801026894985130889146545824683585181484211989251492859704511253787202355247893432541166990397456508716193948352434604991124117336814793934522594152706144554914634607385953690149182144884035468461913421017875819633654405357807347051933182615724568081098606213267150068429658717984288193298732882463808659693231493400447076953830250914250967092298274229831652943329672812690517310050234918406123096994322328166107647477307761865740089096038339950274300235891110221143569368881474502840701834060505468633886608407659177036490882588695993470844543864516374483600056010534183999673666413510666174475122953708166316524564131895739296702546359312703953723724692324954215525274792828988940375429909255216583281350353466608394017864423364242470298594607509692083149439618741754400315697538841937790328166824513749833700859277371913942447494290983126720720233103480558264191955761426319991510302601564195995336048852946531766153311319742059611127895576564598556871796119335818243403750957940253648835916626319686350955744622054977037337269648654284868804711217638187068753383146647921793148658906812165988811320961350844258244124414549518376704277917842257666597696201788106020367339570147661928195117123077884818997970241974638826601001939911341417288585008209351599865284603668969847044010447104293593913794288887509258556707096946698952614523771691277867096863694424630097277862091930171165803078605693921744178713743050498775549537619369272303715771580705417508862693069512283398603507108659631934352165538715441398281181255381403241668557431750200363261963224045379565851280707989224086253241403654378324860524691726595624509155230077097313869507418855625561391992346535107331016503960321521066575248684084990190680743833300228271935383435446511903133799922777314531442867926383232808550866679442726254300772100782487920703585964472280820369141231322226497322610647018173322419394517358982059554622387838598397058862706475516375653965653963690463421465718427834987671021854736269792477016026314544584484767357781307823022119404254192755886450131329103785051185582997574998669543129499277296848633441811198815055860484380870590486254674775392914188744641161391753924760847896966119879710734361750044518489944717738777025043578690906931625968850243706299041167403807084016897476948199921684709365891187480657754629655695531528724158085383832871663893006436881334079071629440465271476288527798312269781288622054835077448254274739064937677551066122920620888208461533310769409097061933351866925908320678836350107608304353456533827803810985841883380276997462828899768282793616699239018438484200858605828385531857296087237596646139239111272575241029283151866416395073526311048450143443058900228772240630654958721423503905002595734418679227243072414348689512147328019368026091523411563857084249009761347337910412001432714200057053029943502295405625196094239967884897759403208484648244353481269776376226737946804112198028606419876366075788375928892706152029710770259703854082121899399111576062870804786555988523298470605132640474703968733438393075408310247568584830018065121840342724357304240250047139597452611940863921673885740743393585185726466450540840899100095041474462257997133027171256621628934764213855011008656975273676969379380088054581955303826475085734207147231412056311216519478847582102059706524326599330695725289074784960599657451936585353396771977095945018202240159253458536768849492206682162799648835913505642613488953752560477689390531396974428179758583915109787842147885473016371650226480775468115206660215411074436754637072902261192414565036408079323876702176237754095692760819950805945017930698801703025720026504738354906540251610980234148560416761591357130293087765041206643712207345991127635586676261442088732918110845658538076220450795847996627996038850195749206508664001063989618530004943988590160129342507972833705840811939277051272476061124568017294173005993858768257065665105703533024548162773373313866519476898429328856672120076843000130953401588883500995312056116934933789958154256424632477901765769199809010270988697215387903470882072820018502236964716778839273949798275536174329827831563932735938901492845866868728745837362562866747995964188453826262508673543086216484849836146029896380601963256938897223202818129640755546293777089471692657506183679345139712954459579683330916390923127285022295330884582951079283907665276538808591231584853590584317245420368295844904879227888298046242537373101932458991384842131860469423827275660574521288397057408946109204861832438078823734934443332560372252435079347826438973108184844727318280964384277745657183304993492177665666167227335006919139784371797139247470912806050695652759984027813716682417400603941161833290405530077390756461176132215604168447985146108078632960591007489354257806629352320956714635448967815666975377818974329282347786903843427272276685790537472919822973653549781301626333063019055044686841656515308944483559940758942362529489536635616438124550628931259041885108459448027790370440075107346840804737788800321449288011562396062847615671613144124592791294022433149471508475781207597697334267071737488352371316328551431904825581723342870215986521466848631635241092245215803469494399845880880125739499969180224118950234719294541581080060410546351508154362267384190462259526329993162546681066227305507960437017055286929742465324589476001647280740206920200249551237311433123706883663388750951906841520317397640801766207296773565273342193527797532093279015917569971748602346218457560425637000459751347230510773998341648927223056630436093128306848400501817902370669187412142295519158082740086976311895742846180585189806909030593716931047289740208394554220985785514090599235825992109398607798129735128692559629333179183553898442883854995999528186814897990113820074025929531399294848807815925895523487525441623510319865865207011441514029305164594630560271679521014073899745070821276764377938644585907617838310476588116775176908662050587116186623410114425688192306032158936860929873316146379296002661988451914940266671626241451227789862827872543051091055074867967551859125191410662811746046818415887226173813636890713481540379418849110782804624020857223558091022333452759933601361814118619252703895566838850588760946921365892826202018119602027401301852549760054582033892452738183399268149089503331730911793418013620150622937563457195386984030420980569555324049334590410945389620053765912607023313133845362639005599816690290251170622620322380374527734812102222615940935621272732801961636339307309384996434709067963951259027951188275951582345827870060846326518209340094729885014290598610856516782954043838762217238965096394053665759204994242444081803652584178004371585746612584621342277179846616052172686128644294629997685473369093769485455732592464299822592337622490699810202222982915111507025864161124348811494202887092893953152730605150427489324175091757693157556318527808766106520302474057341809844704593415738299437751564450597113908382376737636337093287373001333652261432811847998201162930790679828731985070641510419097103370422811018552473560889255554959632898317344066743219334182529637961565887783663878456348937332176450476306764154219461859600838825501198553667045625402083590741380047712970995783931513950356367637490811339947274886743001409402497657333159950590406054894737628055335906623798710066134305268168589910084102198025189771258955709328066702451564926148741387872503666264157632760324473092277241775513542046983956670829114766578312679695056042443371862185899281133208636956855143040896393358900911127225674719995561363710220849970855687451805445625448721338883793478205146973661163083222803904346249364496408472881375308765175201652118002472662475427261980352514413556455622090460810329549915403627759346925188357210647450864245481870167031513205993333954711132996405930532214169333651229313024333109354633078074986837402654074768802015711573873318308553693275241232618460299235057064236021650591982711594344068450788534472603661190000493045199030512425198417438417099535624585658884322807046366949135200561556620342863184702300725571488377593847012387494973911599498983555195817196309760677087968908300127877877110221597304391119549897044267018466018602032574671585587289182593425931363820341204762379758005007720773939916560114354485897166305806389481842528082319101300616876727743703883259137078867669648561292467098895038111719754559802828998827636965548836143205399199440354264178321044113415535814235106479089818185099270004656253882811205362095264210244928855385553375082890619011864872273843039326140719472047612562397621879935247826831491468563039383154541052398307139345975796393728784940941586514247266549349698172679232735790803802236155747528779783231346962335723227228191132705657078600384965679871844713393266131787589175288152921755691725487295235667926296702810401647098250944707222483521560496932179508242723361306697422268866929555264356308763737823761942866279445777956808498071425799535266611621035985616225146676249625729567703554853212849792206930507127029481017504268644184992142013309058489120594273858544588083122660285575823242744980034208213847647172979053243731816921173103102679791698078664440409954949385186748842388522544923827639384984614994252329853459898676568016535828567397821096275817211018875308791545866492744907274288446050903656922217680822017371966715240446962101422247132066753276926251049232170275184043674342388847921548746508658452815663617783715601397947579757572261344427405608260713472143653070447813955104274616837506048702161869521560346978030006407673512430313018062359156006475336827259502781693200828217833809340688565509219026638975277462478445920204499176074365696346335823332665323996465570414560142298153767579557886513045267190135939411029717532833593504389845683663202057734195733614124836539973621600192012715052413671887345526414182069640648603992780307011686680112289292959013321700323548394000372214318198799273890378714159696702610010353762972707229393934434289827178430562274330394518202680768554199181449199148884502893080212391131897855320577585842285978073867156272856844278714528716998460634261485623174839992080243074119620413233317803724945569180471763311542249702000601596754031120105963249806623794178679627465398692704233373386198177296202885655273315130034513837999502259693509660248458080268992063193089570434925945170097322068470537114132461683176424367760193764006126312120307300801203369847546478819159380301927545762520510842526507175589197897419378483924400438117715417180085201038590898426011843924822118525646274513230821578231069086227835620347628021055491201472424052811300719183650818301280672209248968122268438938813505996681842384427821299530136604190367587843396257875133046081187805976975113812668567240685649870471165735218148473687618973617285285994326670160632481093828398504437420569508529666398293095374052837564209362952033786589030747000959498196134638704338147408188174268800646744971511448637792997590812013948610989708228299292133490392348286962188456774135602383372699411779637865929412930168139506546450453095475342535098953983877769829250142988074950373688736654502611333645352205495815758662214095031308474785119245465484158564326164934671805602435316503831511843520176843594517411227714271439329563180130689074003401818331571038942578184304722847436419795598876194550978317368756327709389712185463571800356330439408459458620810854568509447626389719568329173048137933296110888934868466079805934623459636239105923166643345159661197568012791973355238002569174609238502197569826518196397591762884688194161387680378894578484808791809693754385416545673907209746577521026579293422583818929617408829530712389614810253962214263972695935296951253693353467633283815344381781975686515241744930862381488942980319573410203228207746938697222224469420295286552239080432865550325483215037656623475820028199619925086771184119747326113897295408096637963555728566729581898105925827855360262677680772063741259347786980831043056323151563727899109327392570077147514277030308678289766675886372985692784602363806222154026227048887112769992960902440311095694856079243721778286723657046612088982039202294828818219603252510424632519657686925921684317955316514548182114206328732241231093358092680319021819034813565599112804324520138624666310752400620827021987603695352528125268594332415782791366025921115434435517461767830258411697434931944088543490428589868452332828197465655021921674904352108153112667084140179048826170737207781061297743814560199594690681317447214683449054171781291428291192861269663849977759689455435666075263930849162665160751329292799762680231270397190086813816331537705771742499370150546626014677842694476050658052815319586855599098409951079356185664398061926286653224327553885923495043779801352060549582481434441733197242389633097428904109376012985709233177793794553101150285839364404518860150651936754812272172952094614389403150539476557318173265486434886846252425215220151793936823314368147341051358540723608440619802589834423383801782383853372274251762140768948395907689450426828973250964068458324705729180166789006364030915850760540864144750745695993144054726620415355156444389094056863564702889523500145876339120017462845848259582508619012082123520604545905268392807937172460512587086205265891814151645182428243665135895240884769229868577335923551683753553407315187346756004879402896730427198413964114506640129881227818607195124193894803514277527227665130480019872252511090493678234413199219982905626043465241468866001511510161880738318617782835154284463617361467097278663093264718541594305144787263531356709029582160312471430041446414738657350260208235414934655860197414508406036822946427913568942364426781200499927649165923148454325497679625401496600927881773980666530606900095523282353845929004558837917199752628122907534423862120522559659077698661116057216146732928110068729686866251181423259196999284421794310418023228640236133708769415427926169330793264689437001938353262295678195778406237305777032123889684364346032988669379765156869801268451314734072474456651417953594349587542519111986067668169444685609516264092036841082199558234610737307631369328399565587168938942597452321410229569461411510809307335820848764974588454500851881384106792513329271675015540568471173657645274867916991504879440023070389020221144292341906702181909112771590351504974403560698523318907366158190010525981796553990811620640913452167283058201002574342061612564473285265424733519158498748911301785798666182298170229015335738604281130590599402852127356081040302912045056

正确与否,还要进一步鉴定

回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2014-4-22 11:25:55 | 显示全部楼层
由于乘普通数的时候,类型是short,所以上面40000!结果可能不对,40000已经超过short了
回复 赞! 靠!

使用道具 举报

发表于 2014-7-7 13:17:13 | 显示全部楼层
好像很少用到……
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-23 21:13 , Processed in 0.078358 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表