#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename... Args>
void logger(string vars, Args &&... values) {
cout << vars << " = ";
string delim = "";
(..., (cout << delim << values, delim = ", "));
cout << '\n';
}
using namespace __gnu_pbds;
template<typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define int long long
#define ll long long
#define ull unsigned long long
#define ld long double
#define yes cout << "YES"<<'\n';
#define no cout << "NO"<<'\n';
#define nl "\n"
#define sz(s) (int) (s).size()
#define fr(n) for (int i = 0; i < n; ++i)
#define aw3dni_ink_tet3aleg ios_base::sync_with_stdio(false), cout.tie(NULL), cin.tie(NULL);
const double PI = 3.14159265358979323846264338327950288419716939937510L;;
#define sp(x) fixed << setprecision(x)
#define all(v) v.begin(), v.end()
#define ff first
#define ss second
#define pii pair<ll,ll>
#define put(x) return void(cout << x)
#define all(v) v.begin(), v.end()
#define allr(v) v.rbegin(), v.rend()
#define cin(vec) \
for (auto &i: vec) \
cin >> i
#define cout(vec) \
for (auto &i: vec) \
cout << i << " "; \
cout << "\n";
#define ON(n, k) ((n) | (1ll << (k)))
#define OFF(n, k) ((n) & ~(1ll << (k)))
#define isON(n, k) (((n) >> (k)) & 1)
#define flip(n, k) ((n) ^ (1ll << (k)))
#define popcnt(x) (__builtin_popcountll(x))
template<typename T = int>
istream &operator>>(istream &in, vector<T> &v) {
for (auto &x: v)in >> x;
return in;
}
template<typename T = int>
ostream &operator<<(ostream &out, const vector<T> &v) {
for (const T &x: v)out << x << ' ';
return out;
}
void FILES() {
aw3dni_ink_tet3aleg
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
// freopen("angle3.in", "r", stdin);
// freopen("angle3.out", "w", stdout);
}
#define ceil_i(a, b) (((ll) (a) + (ll) (b - 1)) / (ll) (b))
#define floor_i(a, b) (a / b)
#define round_i(a, b) ((a + (b / 2)) / b)
ll OO = 0x3f3f3f3f3f3f3f3f, MOD = 1e9 + 7; //1e9 + 7 ,,998244353
//
// int add(int a, int b) { return ((a % MOD) + (b % MOD) + MOD) % MOD; }
// int mul(int a, int b) { return (((a % MOD) * (b % MOD))) % MOD; }
// int add(int a, int b) {
// if (a < 0)
// a += MOD;
// if (a >= MOD)
// a -= MOD;
// if (b < 0)
// b += MOD;
// if (b >= MOD)
// b -= MOD;
// if (a + b >= MOD)
// return a + b - MOD;
// return a + b;
// }
int add(int a, int b) {
return (0ll + a + b + MOD) % MOD;
}
int sub(int a, int b) {
return add(a, -b);
}
int mul(int a, int b) {
return (1ll * a * b) % MOD;
}
// int sub(int a, int b) { return (((a % MOD) - (b % MOD)) + MOD) % MOD; }
#define INF 1e18
int dx[] = {1, -1, 0, 0, -1, -1, 1, 1};
int dy[] = {0, 0, -1, 1, -1, 1, -1, 1};
int dx_knight[8] = {2, 1, -1, -2, -2, -1, 1, 2};
int dy_knight[8] = {1, 2, 2, 1, -1, -2, -2, -1};
char di[] = {'D', 'L', 'U', 'R'};
// up right down left
const int N = 4e5 + 10, XX = 101, EPS = 1e-12;
// وَقُلْ رَبِّ زِدْنِي عِلْمًا
struct SegmentTree {
private:
#define L 2*node+1
#define R 2*node+2
#define mid (l+r)/2
vector<int> seg;
int size;
int merge(int a,int b) {
return max(a, b);
}
void build(int l, int r,int node, vector<int> &v) {
if (l == r) {
seg[node] = 0;
return;
}
build(l,mid,L, v);
build(mid + 1, r,R, v);
seg[node] = merge(seg[L], seg[R]);
}
int query(int l, int r, int node,int lq, int rq) {
if (lq <= l && r <= rq) return seg[node];
if (l > rq || r < lq)
return 0;
int lft = query(l,mid,L, lq, rq);
int rgt = query(mid + 1, r,R, lq, rq);
return merge(lft, rgt);
}
void update(int l, int r, int node, int idx,int val) {
if (l == r) {
seg[node] = val;
return;
}
if (idx <= mid) update(l, mid, L, idx, val);
else update(mid + 1, r, R, idx, val);
seg[node] = merge(seg[L], seg[R]);
}
public:
SegmentTree(int n) {
size = 1;
while (size < n) size <<= 1;
seg = vector<int>(size * 2, 0);
}
int query(int l, int r) {
return query(0, size - 1, 0, l, r);
}
void update(int idx,int val) {
update(0, size - 1, 0, idx, val);
}
#undef L
#undef R
#undef mid
};
void solve() {
int n, k;
cin >> n >> k;
vector<int> v(n);
map<ll,ll> frq, frq2;
ll mex = 0;
for (int i = 0; i < n; i++)
cin >> v[i], frq[v[i]]++;
for (auto it: frq) {
if (it.ff != mex) {
break;
}
mex++;
}
vector<ll> neww(n);
for (int i = 0; i < n; i++) {
if (frq[v[i]] > 1) {
neww[i] = mex;
} else if (v[i] > mex) {
neww[i] = mex;
} else {
neww[i] = v[i];
}
frq2[neww[i]]++;
}
ll mex2 = 0;
for (auto it: frq2) {
if (it.ff != mex2) {
break;
}
mex2++;
}
// cout << mex2 << nl;
vector<ll> neww2(n);
for (int i = 0; i < n; i++) {
if (frq2[neww[i]] > 1) {
neww2[i] = mex2;
} else if (neww[i] > mex2) {
neww2[i] = mex2;
} else {
neww2[i] = neww[i];
}
}
// cout <<neww<<nl;
if (k == 1) {
ll sum = accumulate(all(neww), 0ll);
cout << sum;
} else if (k==2) {
ll sum = accumulate(all(neww2), 0ll);
cout << sum;
}
else {
if (mex2 == 0 ) {
if (k&1) {
cout << n;
}
else {
cout << 0 ;
}
}
else {
if (k&1) {
ll sum = accumulate(all(neww), 0ll);
cout << sum;
}
else {
ll sum = accumulate(all(neww2), 0ll);
cout << sum;
}
}
}
}
signed main() {
//=========================================================================
FILES();
//=========================================================================
int T = 1, t = 1;
// phi_1_to_n();
// linear_sieve(1e6);
// pre_count();
// sieve();
// PascalPyramid();
// computeCatalan();
// preprocess(50);
// totient_sieve();
// build_spf(2000000);
cin >> T;
while (T--) {
solve();
t++;
// vid++;
cout << nl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgojZGVmaW5lIGRlYiguLi4pIGxvZ2dlcigjX19WQV9BUkdTX18sIF9fVkFfQVJHU19fKQoKdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4Kdm9pZCBsb2dnZXIoc3RyaW5nIHZhcnMsIEFyZ3MgJiYuLi4gdmFsdWVzKSB7CiAgICBjb3V0IDw8IHZhcnMgPDwgIiA9ICI7CiAgICBzdHJpbmcgZGVsaW0gPSAiIjsKICAgICguLi4sIChjb3V0IDw8IGRlbGltIDw8IHZhbHVlcywgZGVsaW0gPSAiLCAiKSk7CiAgICBjb3V0IDw8ICdcbic7Cn0KCnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp1c2luZyBvcmRlcmVkX3NldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgdWxsIHVuc2lnbmVkIGxvbmcgbG9uZwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgeWVzIGNvdXQgPDwgIllFUyI8PCdcbic7CiNkZWZpbmUgbm8gY291dCA8PCAiTk8iPDwnXG4nOwojZGVmaW5lIG5sICJcbiIKI2RlZmluZSBzeihzKSAoaW50KSAocykuc2l6ZSgpCiNkZWZpbmUgZnIobikgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiNkZWZpbmUgYXczZG5pX2lua190ZXQzYWxlZyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY291dC50aWUoTlVMTCksIGNpbi50aWUoTlVMTCk7CmNvbnN0IGRvdWJsZSBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTBMOzsKI2RlZmluZSBzcCh4KSBmaXhlZCA8PCBzZXRwcmVjaXNpb24oeCkKI2RlZmluZSBhbGwodikgdi5iZWdpbigpLCB2LmVuZCgpCiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSBwaWkgcGFpcjxsbCxsbD4KI2RlZmluZSBwdXQoeCkgcmV0dXJuIHZvaWQoY291dCA8PCB4KQojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksIHYuZW5kKCkKI2RlZmluZSBhbGxyKHYpIHYucmJlZ2luKCksIHYucmVuZCgpCiNkZWZpbmUgY2luKHZlYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgZm9yIChhdXRvICZpOiB2ZWMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGNpbiA+PiBpCiNkZWZpbmUgY291dCh2ZWMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgZm9yIChhdXRvICZpOiB2ZWMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBjb3V0IDw8IGkgPDwgIiAiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBjb3V0IDw8ICJcbiI7CiNkZWZpbmUgT04obiwgaykgKChuKSB8ICgxbGwgPDwgKGspKSkKI2RlZmluZSBPRkYobiwgaykgKChuKSAmIH4oMWxsIDw8IChrKSkpCiNkZWZpbmUgaXNPTihuLCBrKSAoKChuKSA+PiAoaykpICYgMSkKI2RlZmluZSBmbGlwKG4sIGspICgobikgXiAoMWxsIDw8IChrKSkpCiNkZWZpbmUgcG9wY250KHgpIChfX2J1aWx0aW5fcG9wY291bnRsbCh4KSkKCnRlbXBsYXRlPHR5cGVuYW1lIFQgPSBpbnQ+CmlzdHJlYW0gJm9wZXJhdG9yPj4oaXN0cmVhbSAmaW4sIHZlY3RvcjxUPiAmdikgewogICAgZm9yIChhdXRvICZ4OiB2KWluID4+IHg7CiAgICByZXR1cm4gaW47Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQgPSBpbnQ+Cm9zdHJlYW0gJm9wZXJhdG9yPDwob3N0cmVhbSAmb3V0LCBjb25zdCB2ZWN0b3I8VD4gJnYpIHsKICAgIGZvciAoY29uc3QgVCAmeDogdilvdXQgPDwgeCA8PCAnICc7CiAgICByZXR1cm4gb3V0Owp9Cgp2b2lkIEZJTEVTKCkgewogICAgYXczZG5pX2lua190ZXQzYWxlZwojaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKICAgIC8vIGZyZW9wZW4oImFuZ2xlMy5pbiIsICJyIiwgc3RkaW4pOwogICAgLy8gZnJlb3BlbigiYW5nbGUzLm91dCIsICJ3Iiwgc3Rkb3V0KTsKfQoKI2RlZmluZSBjZWlsX2koYSwgYikgKCgobGwpIChhKSArIChsbCkgKGIgLSAxKSkgLyAobGwpIChiKSkKI2RlZmluZSBmbG9vcl9pKGEsIGIpIChhIC8gYikKI2RlZmluZSByb3VuZF9pKGEsIGIpICgoYSArIChiIC8gMikpIC8gYikKCmxsIE9PID0gMHgzZjNmM2YzZjNmM2YzZjNmLCBNT0QgPSAxZTkgKyA3OyAvLzFlOSArIDcgLCw5OTgyNDQzNTMKLy8KLy8gaW50IGFkZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuICgoYSAlIE1PRCkgKyAoYiAlIE1PRCkgKyBNT0QpICUgTU9EOyB9CgovLyBpbnQgbXVsKGludCBhLCBpbnQgYikgeyByZXR1cm4gKCgoYSAlIE1PRCkgKiAoYiAlIE1PRCkpKSAlIE1PRDsgfQovLyBpbnQgYWRkKGludCBhLCBpbnQgYikgewovLyAgICAgaWYgKGEgPCAwKQovLyAgICAgICAgIGEgKz0gTU9EOwovLyAgICAgaWYgKGEgPj0gTU9EKQovLyAgICAgICAgIGEgLT0gTU9EOwovLyAgICAgaWYgKGIgPCAwKQovLyAgICAgICAgIGIgKz0gTU9EOwovLyAgICAgaWYgKGIgPj0gTU9EKQovLyAgICAgICAgIGIgLT0gTU9EOwovLyAgICAgaWYgKGEgKyBiID49IE1PRCkKLy8gICAgICAgICByZXR1cm4gYSArIGIgLSBNT0Q7Ci8vICAgICByZXR1cm4gYSArIGI7Ci8vIH0KCmludCBhZGQoaW50IGEsIGludCBiKSB7CiAgICByZXR1cm4gKDBsbCArIGEgKyBiICsgTU9EKSAlIE1PRDsKfQoKaW50IHN1YihpbnQgYSwgaW50IGIpIHsKICAgIHJldHVybiBhZGQoYSwgLWIpOwp9CgppbnQgbXVsKGludCBhLCBpbnQgYikgewogICAgcmV0dXJuICgxbGwgKiBhICogYikgJSBNT0Q7Cn0KCi8vIGludCBzdWIoaW50IGEsIGludCBiKSB7IHJldHVybiAoKChhICUgTU9EKSAtIChiICUgTU9EKSkgKyBNT0QpICUgTU9EOyB9CgoKI2RlZmluZSBJTkYgMWUxOAoKaW50IGR4W10gPSB7MSwgLTEsIDAsIDAsIC0xLCAtMSwgMSwgMX07CmludCBkeVtdID0gezAsIDAsIC0xLCAxLCAtMSwgMSwgLTEsIDF9OwppbnQgZHhfa25pZ2h0WzhdID0gezIsIDEsIC0xLCAtMiwgLTIsIC0xLCAxLCAyfTsKaW50IGR5X2tuaWdodFs4XSA9IHsxLCAyLCAyLCAxLCAtMSwgLTIsIC0yLCAtMX07CmNoYXIgZGlbXSA9IHsnRCcsICdMJywgJ1UnLCAnUid9OwovLyB1cCByaWdodCBkb3duIGxlZnQKCmNvbnN0IGludCBOID0gNGU1ICsgMTAsIFhYID0gMTAxLCBFUFMgPSAxZS0xMjsKCi8vINmI2Y7ZgtmP2YTZkiDYsdmO2KjZkNmRINiy2ZDYr9mS2YbZkNmKINi52ZDZhNmS2YXZi9inCnN0cnVjdCBTZWdtZW50VHJlZSB7CnByaXZhdGU6CiNkZWZpbmUgTCAyKm5vZGUrMQojZGVmaW5lIFIgMipub2RlKzIKI2RlZmluZSBtaWQgKGwrcikvMgoKICAgIHZlY3RvcjxpbnQ+IHNlZzsKICAgIGludCBzaXplOwogICAgaW50IG1lcmdlKGludCBhLGludCBiKSB7CiAgICAgICAgcmV0dXJuIG1heChhLCBiKTsKICAgIH0KCiAgICB2b2lkIGJ1aWxkKGludCBsLCBpbnQgcixpbnQgbm9kZSwgdmVjdG9yPGludD4gJnYpIHsKICAgICAgICBpZiAobCA9PSByKSB7CiAgICAgICAgICAgIHNlZ1tub2RlXSA9IDA7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnVpbGQobCxtaWQsTCwgdik7CiAgICAgICAgYnVpbGQobWlkICsgMSwgcixSLCB2KTsKICAgICAgICBzZWdbbm9kZV0gPSBtZXJnZShzZWdbTF0sIHNlZ1tSXSk7CiAgICB9CgogICAgaW50IHF1ZXJ5KGludCBsLCBpbnQgciwgaW50IG5vZGUsaW50IGxxLCBpbnQgcnEpIHsKICAgICAgICBpZiAobHEgPD0gbCAmJiByIDw9IHJxKSByZXR1cm4gc2VnW25vZGVdOwogICAgICAgIGlmIChsID4gcnEgfHwgciA8IGxxKQogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpbnQgbGZ0ID0gcXVlcnkobCxtaWQsTCwgbHEsIHJxKTsKICAgICAgICBpbnQgcmd0ID0gcXVlcnkobWlkICsgMSwgcixSLCBscSwgcnEpOwogICAgICAgIHJldHVybiBtZXJnZShsZnQsIHJndCk7CiAgICB9CgogICAgdm9pZCB1cGRhdGUoaW50IGwsIGludCByLCBpbnQgbm9kZSwgaW50IGlkeCxpbnQgdmFsKSB7CiAgICAgICAgaWYgKGwgPT0gcikgewogICAgICAgICAgICBzZWdbbm9kZV0gPSB2YWw7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGlkeCA8PSBtaWQpIHVwZGF0ZShsLCBtaWQsIEwsIGlkeCwgdmFsKTsKICAgICAgICBlbHNlIHVwZGF0ZShtaWQgKyAxLCByLCBSLCBpZHgsIHZhbCk7CiAgICAgICAgc2VnW25vZGVdID0gbWVyZ2Uoc2VnW0xdLCBzZWdbUl0pOwogICAgfQoKcHVibGljOgogICAgU2VnbWVudFRyZWUoaW50IG4pIHsKICAgICAgICBzaXplID0gMTsKICAgICAgICB3aGlsZSAoc2l6ZSA8IG4pIHNpemUgPDw9IDE7CiAgICAgICAgc2VnID0gdmVjdG9yPGludD4oc2l6ZSAqIDIsIDApOwogICAgfQoKICAgIGludCBxdWVyeShpbnQgbCwgaW50IHIpIHsKICAgICAgICByZXR1cm4gcXVlcnkoMCwgc2l6ZSAtIDEsIDAsIGwsIHIpOwogICAgfQoKICAgIHZvaWQgdXBkYXRlKGludCBpZHgsaW50IHZhbCkgewogICAgICAgIHVwZGF0ZSgwLCBzaXplIC0gMSwgMCwgaWR4LCB2YWwpOwogICAgfQojdW5kZWYgTAojdW5kZWYgUgojdW5kZWYgbWlkCn07Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IG4sIGs7CiAgICBjaW4gPj4gbiA+PiBrOwogICAgdmVjdG9yPGludD4gdihuKTsKICAgIG1hcDxsbCxsbD4gZnJxLCBmcnEyOwogICAgbGwgbWV4ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIGNpbiA+PiB2W2ldLCBmcnFbdltpXV0rKzsKICAgIGZvciAoYXV0byBpdDogZnJxKSB7CiAgICAgICAgaWYgKGl0LmZmICE9IG1leCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgbWV4Kys7CiAgICB9CiAgICB2ZWN0b3I8bGw+IG5ld3cobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGlmIChmcnFbdltpXV0gPiAxKSB7CiAgICAgICAgICAgIG5ld3dbaV0gPSBtZXg7CiAgICAgICAgfSBlbHNlIGlmICh2W2ldID4gbWV4KSB7CiAgICAgICAgICAgIG5ld3dbaV0gPSBtZXg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV3d1tpXSA9IHZbaV07CiAgICAgICAgfQogICAgICAgIGZycTJbbmV3d1tpXV0rKzsKICAgIH0KICAgIGxsIG1leDIgPSAwOwogICAgZm9yIChhdXRvIGl0OiBmcnEyKSB7CiAgICAgICAgaWYgKGl0LmZmICE9IG1leDIpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIG1leDIrKzsKICAgIH0KICAgIC8vIGNvdXQgPDwgbWV4MiA8PCBubDsKICAgIHZlY3RvcjxsbD4gbmV3dzIobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGlmIChmcnEyW25ld3dbaV1dID4gMSkgewogICAgICAgICAgICBuZXd3MltpXSA9IG1leDI7CiAgICAgICAgfSBlbHNlIGlmIChuZXd3W2ldID4gbWV4MikgewogICAgICAgICAgICBuZXd3MltpXSA9IG1leDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV3dzJbaV0gPSBuZXd3W2ldOwogICAgICAgIH0KICAgIH0KICAgIC8vIGNvdXQgPDxuZXd3PDxubDsKICAgIGlmIChrID09IDEpIHsKICAgICAgICBsbCBzdW0gPSBhY2N1bXVsYXRlKGFsbChuZXd3KSwgMGxsKTsKICAgICAgICBjb3V0IDw8IHN1bTsKICAgIH0gZWxzZSBpZiAoaz09MikgewogICAgICAgIGxsIHN1bSA9IGFjY3VtdWxhdGUoYWxsKG5ld3cyKSwgMGxsKTsKICAgICAgICBjb3V0IDw8IHN1bTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmIChtZXgyID09IDAgKSB7CiAgICAgICAgICAgIGlmIChrJjEpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgbjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgMCA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChrJjEpIHsKICAgICAgICAgICAgICAgIGxsIHN1bSA9IGFjY3VtdWxhdGUoYWxsKG5ld3cpLCAwbGwpOwogICAgICAgICAgICAgICAgY291dCA8PCBzdW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBsbCBzdW0gPSBhY2N1bXVsYXRlKGFsbChuZXd3MiksIDBsbCk7CiAgICAgICAgICAgICAgICBjb3V0IDw8IHN1bTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKCnNpZ25lZCBtYWluKCkgewogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICBGSUxFUygpOwogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICBpbnQgVCA9IDEsIHQgPSAxOwogICAgLy8gcGhpXzFfdG9fbigpOwogICAgLy8gbGluZWFyX3NpZXZlKDFlNik7CiAgICAvLyBwcmVfY291bnQoKTsKICAgIC8vIHNpZXZlKCk7CiAgICAvLyBQYXNjYWxQeXJhbWlkKCk7CiAgICAvLyBjb21wdXRlQ2F0YWxhbigpOwogICAgLy8gcHJlcHJvY2Vzcyg1MCk7CiAgICAvLyB0b3RpZW50X3NpZXZlKCk7CiAgICAvLyBidWlsZF9zcGYoMjAwMDAwMCk7CiAgICBjaW4gPj4gVDsKICAgIHdoaWxlIChULS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgICAgIHQrKzsKICAgICAgICAvLyB2aWQrKzsKICAgICAgICBjb3V0IDw8IG5sOwogICAgfQogICAgcmV0dXJuIDA7Cn0K