Carrying Conundrum

Alice has just learned addition. However, she hasn't learned the concept of "carrying" fully — instead of carrying to the next column, she carries to the column two columns to the left.

For example, the regular way to evaluate the sum 2039+2976 would be as shown:

However, Alice evaluates it as shown:

In particular, this is what she does:

  • add 9 and 6 to make 15, and carry the 1 to the column two columns to the left, i. e. to the column "0 9";
  • add 3 and 7 to make 10 and carry the 1 to the column two columns to the left, i. e. to the column "2 2";
  • add 1, 0, and 9 to make 10 and carry the 1 to the column two columns to the left, i. e. to the column above the plus sign;
  • add 1, 2 and 2 to make 5;
  • add 1 to make 1.

Thus, she ends up with the incorrect result of 15005.

Alice comes up to Bob and says that she has added two numbers to get a result of n. However, Bob knows that Alice adds in her own way. Help Bob find the number of ordered pairs of positive integers such that when Alice adds them, she will get a result of n. Note that pairs (a,b) and (b,a) are considered different if a≠b.

Input

The input consists of multiple test cases. The first line contains an integer t (1≤t≤1000) — the number of test cases. The description of the test cases follows.

The only line of each test case contains an integer n (2≤n≤109) — the number Alice shows Bob.

Output

For each test case, output one integer — the number of ordered pairs of positive integers such that when Alice adds them, she will get a result of n.

Example

input

Copy

5
100
12
8
2021
10000

output

Copy

9
4
7
44
99

Note

In the first test case, when Alice evaluates any of the sums 1+9, 2+8, 3+7, 4+6, 5+5, 6+4, 7+3, 8+2, or 9+1, she will get a result of 100. The picture below shows how Alice evaluates 6+4:

 

思路:当你自己造几个样例用错误的加法计算时你会发现偶数位上的数只会对偶数位产生影响,这时你将奇数位与偶数位分开,用正确的加法算一遍,然后再将算好的数插空插入时,会发现与错误的加法得到的数一样。

这里拿n=2021举例:将它分为x,y。x=22,y=01。组成y的有(0,1)(1,0);组成x的有(0,22)(1,21)……(22,0)。一共有(x+1)*(y+1)种,但这么多种时会有(0,2021)(2021,0)(即0+2021,2021+0)这样的情况出现。所以在最后的答案减二。

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

typedef long long ll;

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        string n;
        int a=0,b=0;
        cin>>n;
        for(int i=0;i<n.size();i++)
        {
            if(i%2==0)
            {
                a*=10;
                a=a+(n[i]-'0');
            }
            else
            {
                b*=10;
                b+=(n[i]-'0');
            }
        }
        ll ans=0;
        ans=(b+1)*(a+1)-2;
        cout<<ans<<endl;

    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值