#include <bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define ins insert
#define sz(a) ((int)(a.size()))
#define mask(n) (1LL << (n))
#define bit(n, i) ((n) >> (i) & 1)
using namespace std;
using ll = long long;
using ld = long double;
const int N = 200005;
struct pt {
ll x, y, r;
pt(): x(), y(), r() {}
pt(ll _x, ll _y, ll _r): x(_x), y(_y), r(_r) {}
int operator<(const pt& o) {
if (x == o.x) {
return y < o.y;
}
return x < o.x;
}
};
ll n;
pt a[N];
namespace sub1 {
int check() {
return n <= 20;
}
int vis[N];
vector<int> g[N];
ll disqr(pt a, pt b) {
return (b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y);
}
void dfs(int u) {
vis[u] = 1;
for (int v: g[u]) {
if (!vis[v]) dfs(v);
}
}
void solve() {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (i == j) continue;
if (disqr(a[i], a[j]) <= a[i].r * a[i].r) {
g[i].pb(j);
}
}
}
ll ans = (ll)(1e18);
for (int msk = 0; msk < mask(n); ++msk) {
for (int i = 1; i <= n; ++i) {
vis[i] = 0;
}
ll sum = 0;
for (int i = 0; i < n; ++i) {
if (bit(msk, i) && !vis[i+1]) {
dfs(i+1);
++sum;
}
}
int ok = 1;
for (int i = 1; i <= n; ++i) {
if (!vis[i]) {
ok = 0;
break;
}
}
if (!ok) continue;
ans = min(ans, sum);
}
cout << ans << "\n";
}
}
namespace sub2 {
int check() {
return n <= 1000;
}
ll id, cnt, on[N], in[N], low[N], num[N], pat[N];
stack<int> st;
vector<int> g[N];
ll disqr(pt a, pt b) {
return (b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y);
}
void scc(int u) {
on[u] = 1;
st.push(u);
low[u] = num[u] = ++id;
for (int v: g[u]) {
if (!num[v]) {
scc(v);
low[u] = min(low[u], low[v]);
}
if (on[v]) {
low[u] = min(low[u], num[v]);
}
}
if (low[u] == num[u]) {
++cnt;
int v = -1;
while (v != u) {
v = st.top();
st.pop();
on[v] = 0;
pat[v] = cnt;
}
}
}
void solve() {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (i == j) continue;
if (disqr(a[i], a[j]) <= a[i].r * a[i].r) {
g[i].pb(j);
}
}
}
cnt = id = 0;
for (int u = 1; u <= n; ++u) {
if (!num[u]) scc(u);
}
for (int u = 1; u <= n; ++u) {
for (int v: g[u]) {
if (pat[u] != pat[v]) {
++in[pat[v]];
}
}
}
ll ans = 0;
for (int u = 1; u <= cnt; ++u) {
ans += (in[u] == 0);
}
cout << ans << "\n";
}
}
namespace subfull {
int check() {
return 1;
}
const int M = 1e6 + 5;
ll id, cnt, on[N], in[N], low[N], num[N], pat[N];
stack<int> st;
pt b[N];
vector<pair<pt, int>> vts[3*M];
map<pair<ll, ll>, ll> rep;
vector<int> g[N];
ll disqr(pt a, pt b) {
return (b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y);
}
ll bin(ll x, ll v) {
ll l = 0, r = sz(vts[x+M]) - 1, res = r+1;
while (l <= r) {
ll m = l + (r - l) / 2;
if (vts[x+M][m].ff.y >= v) {
res = m;
r = m - 1;
}
else {
l = m + 1;
}
}
return res;
}
void scc(int u) {
on[u] = 1;
st.push(u);
low[u] = num[u] = ++id;
for (int v: g[u]) {
if (!num[v]) {
scc(v);
low[u] = min(low[u], low[v]);
}
if (on[v]) {
low[u] = min(low[u], num[v]);
}
}
if (low[u] == num[u]) {
++cnt;
int v = -1;
while (v != u) {
v = st.top();
st.pop();
on[v] = 0;
pat[v] = cnt;
}
}
}
void solve() {
int m = 0;
for (int i = 1; i <= n; ++i) {
if (!rep.count(mp(a[i].x, a[i].y))) {
rep[mp(a[i].x, a[i].y)] = a[i].r;
b[++m] = a[i];
}
else {
rep[mp(a[i].x, a[i].y)] = max(rep[mp(a[i].x, a[i].y)], a[i].r);
}
}
n = m;
for (int i = 1; i <= n; ++i) {
a[i] = pt(b[i].x, b[i].y, rep[mp(b[i].x, b[i].y)]);
}
sort(a+1, a+n+1);
for (int i = 1; i <= n; ++i) {
vts[a[i].x+M].pb(mp(a[i], i));
}
int edg = 0;
for (int i = 1; i <= n; ++i) {
for (ll x = a[i].x-a[i].r; x <= a[i].x+a[i].r; ++x) {
ll p = bin(x, a[i].y-a[i].r);
while (p < sz(vts[x+M]) && vts[x+M][p].ff.y <= a[i].y + a[i].r) {
if (disqr(vts[x+M][p].ff, a[i]) <= a[i].r * a[i].r) {
g[i].pb(vts[x+M][p].ss);
if (++edg >= (int)(1e8)) break;
}
++p;
}
if (edg >= (int)(1e8)) break;
}
if (edg >= (int)(1e8)) break;
}
cnt = id = 0;
for (int u = 1; u <= n; ++u) {
if (!num[u]) scc(u);
}
for (int u = 1; u <= n; ++u) {
for (int v: g[u]) {
if (pat[u] != pat[v]) {
++in[pat[v]];
}
}
}
ll ans = 0;
for (int u = 1; u <= cnt; ++u) {
ans += (in[u] == 0);
}
cout << ans << "\n";
}
}
int main() {
freopen("WIFI.INP", "r", stdin);
freopen("WIFI.OUT", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> a[i].x >> a[i].y >> a[i].r;
}
if (sub1::check()) return sub1::solve(), 0;
if (sub2::check()) return sub2::solve(), 0;
subfull::solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgc3Mgc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgaW5zIGluc2VydAojZGVmaW5lIHN6KGEpICgoaW50KShhLnNpemUoKSkpCiNkZWZpbmUgbWFzayhuKSAoMUxMIDw8IChuKSkKI2RlZmluZSBiaXQobiwgaSkgKChuKSA+PiAoaSkgJiAxKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbGwgPSBsb25nIGxvbmc7CnVzaW5nIGxkID0gbG9uZyBkb3VibGU7Cgpjb25zdCBpbnQgTiA9IDIwMDAwNTsKCnN0cnVjdCBwdCB7CiAgICBsbCB4LCB5LCByOwogICAgcHQoKTogeCgpLCB5KCksIHIoKSB7fQogICAgcHQobGwgX3gsIGxsIF95LCBsbCBfcik6IHgoX3gpLCB5KF95KSwgcihfcikge30KICAgIGludCBvcGVyYXRvcjwoY29uc3QgcHQmIG8pIHsKICAgICAgICBpZiAoeCA9PSBvLngpIHsKICAgICAgICAgICAgcmV0dXJuIHkgPCBvLnk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB4IDwgby54OwogICAgfQp9OwoKbGwgbjsKcHQgYVtOXTsKCm5hbWVzcGFjZSBzdWIxIHsKICAgIGludCBjaGVjaygpIHsKICAgICAgICByZXR1cm4gbiA8PSAyMDsKICAgIH0KCiAgICBpbnQgdmlzW05dOwogICAgdmVjdG9yPGludD4gZ1tOXTsKCiAgICBsbCBkaXNxcihwdCBhLCBwdCBiKSB7CiAgICAgICAgcmV0dXJuIChiLnggLSBhLngpICogKGIueCAtIGEueCkgKyAoYi55IC0gYS55KSAqIChiLnkgLSBhLnkpOwogICAgfQoKICAgIHZvaWQgZGZzKGludCB1KSB7CiAgICAgICAgdmlzW3VdID0gMTsKICAgICAgICBmb3IgKGludCB2OiBnW3VdKSB7CiAgICAgICAgICAgIGlmICghdmlzW3ZdKSBkZnModik7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQgc29sdmUoKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG47ICsraikgewogICAgICAgICAgICAgICAgaWYgKGkgPT0gaikgY29udGludWU7CiAgICAgICAgICAgICAgICBpZiAoZGlzcXIoYVtpXSwgYVtqXSkgPD0gYVtpXS5yICogYVtpXS5yKSB7CiAgICAgICAgICAgICAgICAgICAgZ1tpXS5wYihqKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsbCBhbnMgPSAobGwpKDFlMTgpOwogICAgICAgIGZvciAoaW50IG1zayA9IDA7IG1zayA8IG1hc2sobik7ICsrbXNrKSB7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgICAgICAgICAgdmlzW2ldID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBsbCBzdW0gPSAwOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICAgICAgICAgaWYgKGJpdChtc2ssIGkpICYmICF2aXNbaSsxXSkgewogICAgICAgICAgICAgICAgICAgIGRmcyhpKzEpOwogICAgICAgICAgICAgICAgICAgICsrc3VtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCBvayA9IDE7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgICAgICAgICAgaWYgKCF2aXNbaV0pIHsKICAgICAgICAgICAgICAgICAgICBvayA9IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFvaykgY29udGludWU7CiAgICAgICAgICAgIGFucyA9IG1pbihhbnMsIHN1bSk7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7CiAgICB9Cn0KCm5hbWVzcGFjZSBzdWIyIHsKICAgIGludCBjaGVjaygpIHsKICAgICAgICByZXR1cm4gbiA8PSAxMDAwOwogICAgfQoKICAgIGxsIGlkLCBjbnQsIG9uW05dLCBpbltOXSwgbG93W05dLCBudW1bTl0sIHBhdFtOXTsKICAgIHN0YWNrPGludD4gc3Q7CiAgICB2ZWN0b3I8aW50PiBnW05dOwoKICAgIGxsIGRpc3FyKHB0IGEsIHB0IGIpIHsKICAgICAgICByZXR1cm4gKGIueCAtIGEueCkgKiAoYi54IC0gYS54KSArIChiLnkgLSBhLnkpICogKGIueSAtIGEueSk7CiAgICB9CgogICAgdm9pZCBzY2MoaW50IHUpIHsKICAgICAgICBvblt1XSA9IDE7CiAgICAgICAgc3QucHVzaCh1KTsKICAgICAgICBsb3dbdV0gPSBudW1bdV0gPSArK2lkOwogICAgICAgIGZvciAoaW50IHY6IGdbdV0pIHsKICAgICAgICAgICAgaWYgKCFudW1bdl0pIHsKICAgICAgICAgICAgICAgIHNjYyh2KTsKICAgICAgICAgICAgICAgIGxvd1t1XSA9IG1pbihsb3dbdV0sIGxvd1t2XSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG9uW3ZdKSB7CiAgICAgICAgICAgICAgICBsb3dbdV0gPSBtaW4obG93W3VdLCBudW1bdl0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChsb3dbdV0gPT0gbnVtW3VdKSB7CiAgICAgICAgICAgICsrY250OwogICAgICAgICAgICBpbnQgdiA9IC0xOwogICAgICAgICAgICB3aGlsZSAodiAhPSB1KSB7CiAgICAgICAgICAgICAgICB2ID0gc3QudG9wKCk7CiAgICAgICAgICAgICAgICBzdC5wb3AoKTsKICAgICAgICAgICAgICAgIG9uW3ZdID0gMDsKICAgICAgICAgICAgICAgIHBhdFt2XSA9IGNudDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICB2b2lkIHNvbHZlKCkgewogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBuOyArK2opIHsKICAgICAgICAgICAgICAgIGlmIChpID09IGopIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgaWYgKGRpc3FyKGFbaV0sIGFbal0pIDw9IGFbaV0uciAqIGFbaV0ucikgewogICAgICAgICAgICAgICAgICAgIGdbaV0ucGIoaik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY250ID0gaWQgPSAwOwogICAgICAgIGZvciAoaW50IHUgPSAxOyB1IDw9IG47ICsrdSkgewogICAgICAgICAgICBpZiAoIW51bVt1XSkgc2NjKHUpOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCB1ID0gMTsgdSA8PSBuOyArK3UpIHsKICAgICAgICAgICAgZm9yIChpbnQgdjogZ1t1XSkgewogICAgICAgICAgICAgICAgaWYgKHBhdFt1XSAhPSBwYXRbdl0pIHsKICAgICAgICAgICAgICAgICAgICArK2luW3BhdFt2XV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGwgYW5zID0gMDsKICAgICAgICBmb3IgKGludCB1ID0gMTsgdSA8PSBjbnQ7ICsrdSkgewogICAgICAgICAgICBhbnMgKz0gKGluW3VdID09IDApOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwogICAgfQp9CgpuYW1lc3BhY2Ugc3ViZnVsbCB7CiAgICBpbnQgY2hlY2soKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgY29uc3QgaW50IE0gPSAxZTYgKyA1OwoKICAgIGxsIGlkLCBjbnQsIG9uW05dLCBpbltOXSwgbG93W05dLCBudW1bTl0sIHBhdFtOXTsKICAgIHN0YWNrPGludD4gc3Q7CiAgICBwdCBiW05dOwogICAgdmVjdG9yPHBhaXI8cHQsIGludD4+IHZ0c1szKk1dOwogICAgbWFwPHBhaXI8bGwsIGxsPiwgbGw+IHJlcDsKICAgIHZlY3RvcjxpbnQ+IGdbTl07CgogICAgbGwgZGlzcXIocHQgYSwgcHQgYikgewogICAgICAgIHJldHVybiAoYi54IC0gYS54KSAqIChiLnggLSBhLngpICsgKGIueSAtIGEueSkgKiAoYi55IC0gYS55KTsKICAgIH0KCiAgICBsbCBiaW4obGwgeCwgbGwgdikgewogICAgICAgIGxsIGwgPSAwLCByID0gc3oodnRzW3grTV0pIC0gMSwgcmVzID0gcisxOwogICAgICAgIHdoaWxlIChsIDw9IHIpIHsKICAgICAgICAgICAgbGwgbSA9IGwgKyAociAtIGwpIC8gMjsKICAgICAgICAgICAgaWYgKHZ0c1t4K01dW21dLmZmLnkgPj0gdikgewogICAgICAgICAgICAgICAgcmVzID0gbTsKICAgICAgICAgICAgICAgIHIgPSBtIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGwgPSBtICsgMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgfQoKICAgIHZvaWQgc2NjKGludCB1KSB7CiAgICAgICAgb25bdV0gPSAxOwogICAgICAgIHN0LnB1c2godSk7CiAgICAgICAgbG93W3VdID0gbnVtW3VdID0gKytpZDsKICAgICAgICBmb3IgKGludCB2OiBnW3VdKSB7CiAgICAgICAgICAgIGlmICghbnVtW3ZdKSB7CiAgICAgICAgICAgICAgICBzY2Modik7CiAgICAgICAgICAgICAgICBsb3dbdV0gPSBtaW4obG93W3VdLCBsb3dbdl0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChvblt2XSkgewogICAgICAgICAgICAgICAgbG93W3VdID0gbWluKGxvd1t1XSwgbnVtW3ZdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobG93W3VdID09IG51bVt1XSkgewogICAgICAgICAgICArK2NudDsKICAgICAgICAgICAgaW50IHYgPSAtMTsKICAgICAgICAgICAgd2hpbGUgKHYgIT0gdSkgewogICAgICAgICAgICAgICAgdiA9IHN0LnRvcCgpOwogICAgICAgICAgICAgICAgc3QucG9wKCk7CiAgICAgICAgICAgICAgICBvblt2XSA9IDA7CiAgICAgICAgICAgICAgICBwYXRbdl0gPSBjbnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgdm9pZCBzb2x2ZSgpIHsKICAgICAgICBpbnQgbSA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgICAgIGlmICghcmVwLmNvdW50KG1wKGFbaV0ueCwgYVtpXS55KSkpIHsKICAgICAgICAgICAgICAgIHJlcFttcChhW2ldLngsIGFbaV0ueSldID0gYVtpXS5yOwogICAgICAgICAgICAgICAgYlsrK21dID0gYVtpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJlcFttcChhW2ldLngsIGFbaV0ueSldID0gbWF4KHJlcFttcChhW2ldLngsIGFbaV0ueSldLCBhW2ldLnIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG4gPSBtOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgICAgICBhW2ldID0gcHQoYltpXS54LCBiW2ldLnksIHJlcFttcChiW2ldLngsIGJbaV0ueSldKTsKICAgICAgICB9CiAgICAgICAgc29ydChhKzEsIGErbisxKTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgICAgICAgICAgdnRzW2FbaV0ueCtNXS5wYihtcChhW2ldLCBpKSk7CiAgICAgICAgfQogICAgICAgIGludCBlZGcgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgICAgICBmb3IgKGxsIHggPSBhW2ldLngtYVtpXS5yOyB4IDw9IGFbaV0ueCthW2ldLnI7ICsreCkgewogICAgICAgICAgICAgICAgbGwgcCA9IGJpbih4LCBhW2ldLnktYVtpXS5yKTsKICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgc3oodnRzW3grTV0pICYmIHZ0c1t4K01dW3BdLmZmLnkgPD0gYVtpXS55ICsgYVtpXS5yKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3FyKHZ0c1t4K01dW3BdLmZmLCBhW2ldKSA8PSBhW2ldLnIgKiBhW2ldLnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ1tpXS5wYih2dHNbeCtNXVtwXS5zcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2VkZyA+PSAoaW50KSgxZTgpKSBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgKytwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVkZyA+PSAoaW50KSgxZTgpKSBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZWRnID49IChpbnQpKDFlOCkpIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjbnQgPSBpZCA9IDA7CiAgICAgICAgZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgKyt1KSB7CiAgICAgICAgICAgIGlmICghbnVtW3VdKSBzY2ModSk7CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IHUgPSAxOyB1IDw9IG47ICsrdSkgewogICAgICAgICAgICBmb3IgKGludCB2OiBnW3VdKSB7CiAgICAgICAgICAgICAgICBpZiAocGF0W3VdICE9IHBhdFt2XSkgewogICAgICAgICAgICAgICAgICAgICsraW5bcGF0W3ZdXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsbCBhbnMgPSAwOwogICAgICAgIGZvciAoaW50IHUgPSAxOyB1IDw9IGNudDsgKyt1KSB7CiAgICAgICAgICAgIGFucyArPSAoaW5bdV0gPT0gMCk7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgZnJlb3BlbigiV0lGSS5JTlAiLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIldJRkkuT1VUIiwgInciLCBzdGRvdXQpOwoKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBjaW4gPj4gbjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgIGNpbiA+PiBhW2ldLnggPj4gYVtpXS55ID4+IGFbaV0ucjsKICAgIH0KCiAgICBpZiAoc3ViMTo6Y2hlY2soKSkgcmV0dXJuIHN1YjE6OnNvbHZlKCksIDA7CiAgICBpZiAoc3ViMjo6Y2hlY2soKSkgcmV0dXJuIHN1YjI6OnNvbHZlKCksIDA7CiAgICBzdWJmdWxsOjpzb2x2ZSgpOwoKICAgIHJldHVybiAwOwp9