#include <bits/stdc++.h>
using namespace std;
struct Tree
{
int data;
Tree* left;
Tree* right;
Tree(int key)
{
data=key;
left=nullptr;
right=nullptr;
}
};
Tree* insert(Tree* root,long long data)
{
if(root==nullptr)
return new Tree(data);
if(root->data<data)
{
root->right=insert(root->right,data);
}
else
{
root->left=insert(root->left,data);
}
return root;
}
long long noofdigits(long long r)
{
long long c=0;
while(r>0)
{
c++;
r/=10;
}
return c;
}
long long sum(Tree* root,long long num)
{
if(root==nullptr)
return 0;
long long r=root->data;
num=root->data+num*pow(10,noofdigits(r));
num=num%1000000007;
if(root->left==nullptr && root->right==nullptr)
{
return num%1000000007;
}
return sum(root->left,num)+sum(root->right,num);
}
int main() {
int t;
cin>>t;
while(t--)
{
long long n;
cin>>n;
long long a[n];
for(long long i=0;i<n;i++)
{
cin>>a[i];
}
Tree* root=nullptr;
for(long long i=0;i<n;i++)
{
root=insert(root,a[i]);
}
long long num=0;
long long ans=sum(root,num);
cout<<ans%1000000007<<endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBUcmVlCnsKICAgIGludCBkYXRhOwogICAgVHJlZSogbGVmdDsKICAgIFRyZWUqIHJpZ2h0OwogICAgVHJlZShpbnQga2V5KQogICAgewogICAgICAgIGRhdGE9a2V5OwogICAgICAgIGxlZnQ9bnVsbHB0cjsKICAgICAgICByaWdodD1udWxscHRyOwogICAgfQp9OwpUcmVlKiBpbnNlcnQoVHJlZSogcm9vdCxsb25nIGxvbmcgZGF0YSkKewogICAgaWYocm9vdD09bnVsbHB0cikKICAgIHJldHVybiBuZXcgVHJlZShkYXRhKTsKICAgIGlmKHJvb3QtPmRhdGE8ZGF0YSkKICAgIHsKICAgICAgICByb290LT5yaWdodD1pbnNlcnQocm9vdC0+cmlnaHQsZGF0YSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgcm9vdC0+bGVmdD1pbnNlcnQocm9vdC0+bGVmdCxkYXRhKTsKICAgIH0KICAgIHJldHVybiByb290Owp9CmxvbmcgbG9uZyBub29mZGlnaXRzKGxvbmcgbG9uZyByKQp7CiAgICBsb25nIGxvbmcgYz0wOwogICAgd2hpbGUocj4wKQogICAgewogICAgICAgIGMrKzsKICAgICAgICByLz0xMDsKICAgIH0KICAgIHJldHVybiBjOwp9CmxvbmcgbG9uZyBzdW0oVHJlZSogcm9vdCxsb25nIGxvbmcgbnVtKQp7CiAgICBpZihyb290PT1udWxscHRyKQogICAgcmV0dXJuIDA7CiAgICBsb25nIGxvbmcgcj1yb290LT5kYXRhOwogICAgbnVtPXJvb3QtPmRhdGErbnVtKnBvdygxMCxub29mZGlnaXRzKHIpKTsKICAgIG51bT1udW0lMTAwMDAwMDAwNzsKICAgIGlmKHJvb3QtPmxlZnQ9PW51bGxwdHIgJiYgcm9vdC0+cmlnaHQ9PW51bGxwdHIpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bSUxMDAwMDAwMDA3OwogICAgfQogICAgcmV0dXJuIHN1bShyb290LT5sZWZ0LG51bSkrc3VtKHJvb3QtPnJpZ2h0LG51bSk7Cn0KaW50IG1haW4oKSB7CiAgICBpbnQgdDsKICAgIGNpbj4+dDsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgICAgICBsb25nIGxvbmcgbjsKICAgICAgICBjaW4+Pm47CiAgICAgICAgbG9uZyBsb25nIGFbbl07CiAgICAgICAgZm9yKGxvbmcgbG9uZyBpPTA7aTxuO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGNpbj4+YVtpXTsKICAgICAgICB9CiAgICAgICAgVHJlZSogcm9vdD1udWxscHRyOwogICAgICAgIGZvcihsb25nIGxvbmcgaT0wO2k8bjtpKyspCiAgICAgICAgewogICAgICAgIHJvb3Q9aW5zZXJ0KHJvb3QsYVtpXSk7CiAgICAgICAgfQogICAgICAgIGxvbmcgbG9uZyBudW09MDsKICAgICAgICAgIGxvbmcgbG9uZyBhbnM9c3VtKHJvb3QsbnVtKTsKICAgICAgICBjb3V0PDxhbnMlMTAwMDAwMDAwNzw8ZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9