#include<bits/stdc++.h>
using namespace std;
template<typename F, typename S>
ostream &operator<<(ostream &os, const pair<F, S> &p) {
return os << "(" << p.first << ", " << p.second << ")";
}
template<typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
os << "{";
typename vector<T>::const_iterator it;
for (it = v.begin(); it != v.end(); it++) {
if (it != v.begin()) os << ", ";
os << *it;
}
return os << "}";
}
template<typename T>
ostream &operator<<(ostream &os, const set<T> &v) {
os << "[";
typename set<T>::const_iterator it;
for (it = v.begin(); it != v.end(); it++) {
if (it != v.begin()) os << ", ";
os << *it;
}
return os << "]";
}
template<typename F, typename S>
ostream &operator<<(ostream &os, const map<F, S> &v) {
os << "[";
typename map<F, S>::const_iterator it;
for (it = v.begin(); it != v.end(); it++) {
if (it != v.begin()) os << ", ";
os << it->first << " = " << it->second;
}
return os << "]";
}
#define debug(x) cerr << #x << " = " << x << endl;
#define trace1(x) cerr<<#x<<": "<<x<<endl
#define trace2(x, y) cerr<<#x<<": "<<x<<" | "<<#y<<": "<<y<<endl
#define trace3(x, y, z) cerr<<#x<<":" <<x<<" | "<<#y<<": "<<y<<" | "<<#z<<": "<<z<<endl
#define trace4(a, b, c, d) cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<endl
#define trace5(a, b, c, d, e) cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<" | "<<#e<< ": "<<e<<endl
#define trace6(a, b, c, d, e, f) cerr<<#a<<": "<<a<<" | "<<#b<<": "<<b<<" | "<<#c<<": "<<c<<" | "<<#d<<": "<<d<<" | "<<#e<< ": "<<e<<" | "<<#f<<": "<<f<<endl
typedef long long int ll;
typedef long double ld;
typedef vector<int> vi;
typedef vector<long long int> vll;
typedef pair<int, int> pii;
typedef pair<long long int, long long int> pll;
typedef map<int, int> mii;
typedef vector< pair<int, int> > vpii;
#define endl "\n";
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define pb push_back
#define mp make_pair
#define all(c) (c).begin(),(c).end()
#define tr(cont, it) for(decltype((cont).begin()) it = (cont).begin(); it != (cont).end(); it++)
#define present(c, x) ((c).find(x) != (c).end())
#define cpresent(c, x) (find(all(c),x) != (c).end())
#define F first
#define S second
const ld PI=acos(-1.0);
const ll mod = 1000000007;
const ll inf = (ll) 1e15;
ll power(ll a, ll b, ll m = mod) {if (b == 0) return 1; if (b == 1) return (a % m); ll x = power(a, b / 2, m); x = (x * x) % m; if (b % 2) x = (x * a) % m;return x;}
ll max(ll a, ll b) { return (a > b ? a : b); }
ll min(ll a, ll b) { return (a < b ? a : b); }
const int N=11;
const int M=1e5+5;
int n,k;
bool a[N];
ll l,r;
string s;
ll dp[20][3][11][11][2555][3];
set<string> s1,s2;
int x;
ll func(int idx,bool isless,int rem,int prev,int occur,bool inc)
{
if(rem<=0)
return 0;
if(idx==s.size())
{
// debug(idx);
for(int i=1;i<=9;i++)
{
if(a[i])
{
if(occur&(1<<i))
continue;
else
return 0;
}
}
return 1;
}
if(dp[idx][isless][rem][prev][occur][inc]!=-1)
return dp[idx][isless][rem][prev][occur][inc];
ll ret=0;
if(inc)
{
for(int i=prev+1;i<=9;i++)
{
if(isless== false && i>(s[idx]-'0'))
continue;
if(isless== false && i==(s[idx]-'0'))
{
ret+=func(idx+1, false,rem-1,i,occur|(1<<i),true);
continue;
}
ret+=func(idx+1,true,rem-1,i,occur|(1<<i),true);
}
for(int i=prev-1;i>=0;i--)
{
if(i==0 && prev!=0)
continue;
if(isless== false && i>(s[idx]-'0'))
continue;
if(isless== false && i==(s[idx]-'0'))
{
ret+=func(idx+1,false,k-1,i,occur|(1<<i), false);
continue;
}
ret+=func(idx+1,true,k-1,i,occur|(1<<i),false);
}
}
else
{
//decresing
for(int i=prev-1;i>=0;i--)
{
if(i==0 && prev!=0)
continue;
if(isless== false && i>(s[idx]-'0'))
continue;
if(isless== false && i==(s[idx]-'0'))
{
ret+=func(idx+1,false,rem-1,i,occur|(1<<i), false);
continue;
}
ret+=func(idx+1,true,rem-1,i,occur|(1<<i),false);
}
for(int i=prev+1;i<=9;i++)
{
if(isless== false && i>(s[idx]-'0'))
continue;
if(isless== false && i==(s[idx]-'0'))
{
ret+=func(idx+1, false,k-1,i,occur|(1<<i),true);
continue;
}
ret+=func(idx+1,true,k-1,i,occur|(1<<i),true);
}
}
//trace2(ret,idx);
return dp[idx][isless][rem][prev][occur][inc]=ret;
}
void solve()
{
for (int i = 1 ; i <= 9 ; i++)
a[i] = false;
cin >> n ;
for(int i=1;i<=n;i++)
{
int idx;
cin >> idx;
a[idx]=true;
}
cin >> k;
cin >> l >> r;
l--;
s.resize(0);
s=to_string(r);
x=1;
memset(dp,-1, sizeof(dp));
// debug(s);
ll ans1=func(0,0,k,0, 0, true)+func(0,0,k,10, 0, false);
for(int i=1;i<s.size();i++)
{
ans1+=(func(i,true,k,0,0,true)+func(i,true,k,10,0,false));
}
x=2;
s.resize(0);
s=to_string(l);
memset(dp,-1, sizeof(dp));
ll ans2=func(0,0,k,0, 0, true)+func(0,0,k,10, 0, false);
for(int i=1;i<s.size();i++)
{
ans2+=(func(i,true,k,0,0,true)+func(i,true,k,10,0,false));
}
trace2(ans1,ans2);
cout << ans1- ans2 << endl;
}
int main() {
IOS;
int t = 1, num = 1; ///// change this t for number of testcase globally
cin >> t;
while (t--) {
solve();
}
return 0;
}
/* stuff you should look for
* int overflow, array bounds
* special cases (n=1?), set tle
* do smth instead of nothing and stay organized
*/
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPHR5cGVuYW1lIEYsIHR5cGVuYW1lIFM+Cm9zdHJlYW0gJm9wZXJhdG9yPDwob3N0cmVhbSAmb3MsIGNvbnN0IHBhaXI8RiwgUz4gJnApIHsKICAgIHJldHVybiBvcyA8PCAiKCIgPDwgcC5maXJzdCA8PCAiLCAiIDw8IHAuc2Vjb25kIDw8ICIpIjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZvcywgY29uc3QgdmVjdG9yPFQ+ICZ2KSB7CiAgICBvcyA8PCAieyI7CiAgICB0eXBlbmFtZSB2ZWN0b3I8VD46OmNvbnN0X2l0ZXJhdG9yIGl0OwogICAgZm9yIChpdCA9IHYuYmVnaW4oKTsgaXQgIT0gdi5lbmQoKTsgaXQrKykgewogICAgICAgIGlmIChpdCAhPSB2LmJlZ2luKCkpIG9zIDw8ICIsICI7CiAgICAgICAgb3MgPDwgKml0OwogICAgfQogICAgcmV0dXJuIG9zIDw8ICJ9IjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZvcywgY29uc3Qgc2V0PFQ+ICZ2KSB7CiAgICBvcyA8PCAiWyI7CiAgICB0eXBlbmFtZSBzZXQ8VD46OmNvbnN0X2l0ZXJhdG9yIGl0OwogICAgZm9yIChpdCA9IHYuYmVnaW4oKTsgaXQgIT0gdi5lbmQoKTsgaXQrKykgewogICAgICAgIGlmIChpdCAhPSB2LmJlZ2luKCkpIG9zIDw8ICIsICI7CiAgICAgICAgb3MgPDwgKml0OwogICAgfQogICAgcmV0dXJuIG9zIDw8ICJdIjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgRiwgdHlwZW5hbWUgUz4Kb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZvcywgY29uc3QgbWFwPEYsIFM+ICZ2KSB7CiAgICBvcyA8PCAiWyI7CiAgICB0eXBlbmFtZSBtYXA8RiwgUz46OmNvbnN0X2l0ZXJhdG9yIGl0OwogICAgZm9yIChpdCA9IHYuYmVnaW4oKTsgaXQgIT0gdi5lbmQoKTsgaXQrKykgewogICAgICAgIGlmIChpdCAhPSB2LmJlZ2luKCkpIG9zIDw8ICIsICI7CiAgICAgICAgb3MgPDwgaXQtPmZpcnN0IDw8ICIgPSAiIDw8IGl0LT5zZWNvbmQ7CiAgICB9CiAgICByZXR1cm4gb3MgPDwgIl0iOwp9CgojZGVmaW5lIGRlYnVnKHgpIGNlcnIgPDwgI3ggPDwgIiA9ICIgPDwgeCA8PCBlbmRsOwojZGVmaW5lIHRyYWNlMSh4KSAgICAgICAgICAgICAgICBjZXJyPDwjeDw8IjogIjw8eDw8ZW5kbAojZGVmaW5lIHRyYWNlMih4LCB5KSAgICAgICAgICAgICBjZXJyPDwjeDw8IjogIjw8eDw8IiB8ICI8PCN5PDwiOiAiPDx5PDxlbmRsCiNkZWZpbmUgdHJhY2UzKHgsIHksIHopICAgICAgICAgIGNlcnI8PCN4PDwiOiIgPDx4PDwiIHwgIjw8I3k8PCI6ICI8PHk8PCIgfCAiPDwjejw8IjogIjw8ejw8ZW5kbAojZGVmaW5lIHRyYWNlNChhLCBiLCBjLCBkKSAgICAgICBjZXJyPDwjYTw8IjogIjw8YTw8IiB8ICI8PCNiPDwiOiAiPDxiPDwiIHwgIjw8I2M8PCI6ICI8PGM8PCIgfCAiPDwjZDw8IjogIjw8ZDw8ZW5kbAojZGVmaW5lIHRyYWNlNShhLCBiLCBjLCBkLCBlKSAgICBjZXJyPDwjYTw8IjogIjw8YTw8IiB8ICI8PCNiPDwiOiAiPDxiPDwiIHwgIjw8I2M8PCI6ICI8PGM8PCIgfCAiPDwjZDw8IjogIjw8ZDw8IiB8ICI8PCNlPDwgIjogIjw8ZTw8ZW5kbAojZGVmaW5lIHRyYWNlNihhLCBiLCBjLCBkLCBlLCBmKSBjZXJyPDwjYTw8IjogIjw8YTw8IiB8ICI8PCNiPDwiOiAiPDxiPDwiIHwgIjw8I2M8PCI6ICI8PGM8PCIgfCAiPDwjZDw8IjogIjw8ZDw8IiB8ICI8PCNlPDwgIjogIjw8ZTw8IiB8ICI8PCNmPDwiOiAiPDxmPDxlbmRsCgoKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3Rvcjxsb25nIGxvbmcgaW50PiB2bGw7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwp0eXBlZGVmIHBhaXI8bG9uZyBsb25nIGludCwgbG9uZyBsb25nIGludD4gcGxsOwp0eXBlZGVmIG1hcDxpbnQsIGludD4gbWlpOwp0eXBlZGVmIHZlY3RvcjwgcGFpcjxpbnQsIGludD4gPiB2cGlpOwoKI2RlZmluZSBlbmRsICJcbiI7CiNkZWZpbmUgSU9TIGlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBhbGwoYykgKGMpLmJlZ2luKCksKGMpLmVuZCgpCiNkZWZpbmUgdHIoY29udCwgaXQpIGZvcihkZWNsdHlwZSgoY29udCkuYmVnaW4oKSkgaXQgPSAoY29udCkuYmVnaW4oKTsgaXQgIT0gKGNvbnQpLmVuZCgpOyBpdCsrKQojZGVmaW5lIHByZXNlbnQoYywgeCkgKChjKS5maW5kKHgpICE9IChjKS5lbmQoKSkKI2RlZmluZSBjcHJlc2VudChjLCB4KSAoZmluZChhbGwoYykseCkgIT0gKGMpLmVuZCgpKQojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAoKCmNvbnN0IGxkIFBJPWFjb3MoLTEuMCk7CmNvbnN0IGxsIG1vZCA9IDEwMDAwMDAwMDc7CmNvbnN0IGxsIGluZiA9IChsbCkgMWUxNTsKCmxsIHBvd2VyKGxsIGEsIGxsIGIsIGxsIG0gPSBtb2QpIHtpZiAoYiA9PSAwKSByZXR1cm4gMTsgaWYgKGIgPT0gMSkgcmV0dXJuIChhICUgbSk7IGxsIHggPSBwb3dlcihhLCBiIC8gMiwgbSk7IHggPSAoeCAqIHgpICUgbTsgaWYgKGIgJSAyKSB4ID0gKHggKiBhKSAlIG07cmV0dXJuIHg7fQpsbCBtYXgobGwgYSwgbGwgYikgeyByZXR1cm4gKGEgPiBiID8gYSA6IGIpOyB9CmxsIG1pbihsbCBhLCBsbCBiKSB7IHJldHVybiAoYSA8IGIgPyBhIDogYik7IH0KCmNvbnN0IGludCBOPTExOwpjb25zdCBpbnQgTT0xZTUrNTsKCmludCBuLGs7CmJvb2wgYVtOXTsKbGwgbCxyOwpzdHJpbmcgczsKbGwgZHBbMjBdWzNdWzExXVsxMV1bMjU1NV1bM107CnNldDxzdHJpbmc+IHMxLHMyOwppbnQgeDsKCmxsIGZ1bmMoaW50IGlkeCxib29sIGlzbGVzcyxpbnQgcmVtLGludCBwcmV2LGludCBvY2N1cixib29sIGluYykKewogICAgaWYocmVtPD0wKQogICAgICAgIHJldHVybiAwOwogICAgaWYoaWR4PT1zLnNpemUoKSkKICAgIHsKICAgICAgICAvLyBkZWJ1ZyhpZHgpOwogICAgICAgIGZvcihpbnQgaT0xO2k8PTk7aSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYoYVtpXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYob2NjdXImKDE8PGkpKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAxOwogICAgfQogICAgaWYoZHBbaWR4XVtpc2xlc3NdW3JlbV1bcHJldl1bb2NjdXJdW2luY10hPS0xKQogICAgICAgIHJldHVybiBkcFtpZHhdW2lzbGVzc11bcmVtXVtwcmV2XVtvY2N1cl1baW5jXTsKICAgIGxsIHJldD0wOwogICAgaWYoaW5jKQogICAgewogICAgICAgIGZvcihpbnQgaT1wcmV2KzE7aTw9OTtpKyspCiAgICAgICAgewogICAgICAgICAgICBpZihpc2xlc3M9PSBmYWxzZSAmJiBpPihzW2lkeF0tJzAnKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZihpc2xlc3M9PSBmYWxzZSAmJiBpPT0oc1tpZHhdLScwJykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldCs9ZnVuYyhpZHgrMSwgZmFsc2UscmVtLTEsaSxvY2N1cnwoMTw8aSksdHJ1ZSk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXQrPWZ1bmMoaWR4KzEsdHJ1ZSxyZW0tMSxpLG9jY3VyfCgxPDxpKSx0cnVlKTsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBpPXByZXYtMTtpPj0wO2ktLSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKGk9PTAgJiYgcHJldiE9MCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZihpc2xlc3M9PSBmYWxzZSAmJiBpPihzW2lkeF0tJzAnKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZihpc2xlc3M9PSBmYWxzZSAmJiBpPT0oc1tpZHhdLScwJykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldCs9ZnVuYyhpZHgrMSxmYWxzZSxrLTEsaSxvY2N1cnwoMTw8aSksIGZhbHNlKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldCs9ZnVuYyhpZHgrMSx0cnVlLGstMSxpLG9jY3VyfCgxPDxpKSxmYWxzZSk7CiAgICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICAgIC8vZGVjcmVzaW5nCiAgICAgICAgZm9yKGludCBpPXByZXYtMTtpPj0wO2ktLSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKGk9PTAgJiYgcHJldiE9MCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZihpc2xlc3M9PSBmYWxzZSAmJiBpPihzW2lkeF0tJzAnKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZihpc2xlc3M9PSBmYWxzZSAmJiBpPT0oc1tpZHhdLScwJykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldCs9ZnVuYyhpZHgrMSxmYWxzZSxyZW0tMSxpLG9jY3VyfCgxPDxpKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0Kz1mdW5jKGlkeCsxLHRydWUscmVtLTEsaSxvY2N1cnwoMTw8aSksZmFsc2UpOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IGk9cHJldisxO2k8PTk7aSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYoaXNsZXNzPT0gZmFsc2UgJiYgaT4oc1tpZHhdLScwJykpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYoaXNsZXNzPT0gZmFsc2UgJiYgaT09KHNbaWR4XS0nMCcpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXQrPWZ1bmMoaWR4KzEsIGZhbHNlLGstMSxpLG9jY3VyfCgxPDxpKSx0cnVlKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldCs9ZnVuYyhpZHgrMSx0cnVlLGstMSxpLG9jY3VyfCgxPDxpKSx0cnVlKTsKICAgICAgICB9CiAgICB9CiAgICAgIC8vdHJhY2UyKHJldCxpZHgpOwogICAgcmV0dXJuIGRwW2lkeF1baXNsZXNzXVtyZW1dW3ByZXZdW29jY3VyXVtpbmNdPXJldDsKfQoKdm9pZCBzb2x2ZSgpIAp7CiAgICBmb3IgKGludCBpID0gMSA7IGkgPD0gOSA7IGkrKykKICAgICAgICBhW2ldID0gZmFsc2U7CiAgICBjaW4gPj4gbiA7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykKICAgIHsKICAgICAgICBpbnQgaWR4OwogICAgICAgIGNpbiA+PiBpZHg7CiAgICAgICAgYVtpZHhdPXRydWU7CiAgICB9CiAgICBjaW4gPj4gazsKICAgIGNpbiA+PiBsID4+IHI7CiAgICBsLS07CiAgICBzLnJlc2l6ZSgwKTsKICAgIHM9dG9fc3RyaW5nKHIpOwogICAgeD0xOwogICAgbWVtc2V0KGRwLC0xLCBzaXplb2YoZHApKTsKICAgIC8vIGRlYnVnKHMpOwogICAgbGwgYW5zMT1mdW5jKDAsMCxrLDAsIDAsIHRydWUpK2Z1bmMoMCwwLGssMTAsIDAsIGZhbHNlKTsKICAgIGZvcihpbnQgaT0xO2k8cy5zaXplKCk7aSsrKQogICAgewogICAgICAgIGFuczErPShmdW5jKGksdHJ1ZSxrLDAsMCx0cnVlKStmdW5jKGksdHJ1ZSxrLDEwLDAsZmFsc2UpKTsKICAgIH0KICAgIHg9MjsKICAgIHMucmVzaXplKDApOwogICAgcz10b19zdHJpbmcobCk7CiAgICBtZW1zZXQoZHAsLTEsIHNpemVvZihkcCkpOwogICAgbGwgYW5zMj1mdW5jKDAsMCxrLDAsIDAsIHRydWUpK2Z1bmMoMCwwLGssMTAsIDAsIGZhbHNlKTsKICAgIGZvcihpbnQgaT0xO2k8cy5zaXplKCk7aSsrKQogICAgewogICAgICAgIGFuczIrPShmdW5jKGksdHJ1ZSxrLDAsMCx0cnVlKStmdW5jKGksdHJ1ZSxrLDEwLDAsZmFsc2UpKTsKICAgIH0KICAgIHRyYWNlMihhbnMxLGFuczIpOwogICAgY291dCA8PCBhbnMxLSBhbnMyIDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewogICAgSU9TOwogICAgaW50IHQgPSAxLCBudW0gPSAxOyAgIC8vLy8vIGNoYW5nZSB0aGlzIHQgZm9yIG51bWJlciBvZiB0ZXN0Y2FzZSBnbG9iYWxseQogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAwOwp9CgovKiBzdHVmZiB5b3Ugc2hvdWxkIGxvb2sgZm9yCiAgICAqIGludCBvdmVyZmxvdywgYXJyYXkgYm91bmRzCiAgICAqIHNwZWNpYWwgY2FzZXMgKG49MT8pLCBzZXQgdGxlCiAgICAqIGRvIHNtdGggaW5zdGVhZCBvZiBub3RoaW5nIGFuZCBzdGF5IG9yZ2FuaXplZAoqLwo=