template<class T1, class T2>void sortA_L(int N, T1 a[], T2 b[], void*mem = wmem){
int i;
pair<T1, T2>*arr;
walloc1d(&arr, N, &mem);
for(i=(0);i<(N);i++){
arr[i].first= a[i];
arr[i].second= b[i];
}
sort(arr, arr+N);
for(i=(0);i<(N);i++){
a[i]= arr[i].first;
b[i]= arr[i].second;
}
}
template<class T1, class T2, class T3>void sortA_L(int N, T1 a[], T2 b[], T3 c[], void*mem = wmem){
int i;
pair<T1, pair<T2, T3>>*arr;
walloc1d(&arr, N, &mem);
for(i=(0);i<(N);i++){
arr[i].first= a[i];
arr[i].second.first= b[i];
arr[i].second.second= c[i];
}
sort(arr, arr+N);
for(i=(0);i<(N);i++){
a[i]= arr[i].first;
b[i]= arr[i].second.first;
c[i]= arr[i].second.second;
}
}
template<class S>inlinevoid arrInsert(constint k, int&sz, S a[], const S aval){
int i;
sz++;
for(i=sz-1;i>k;i--){
a[i]= a[i-1];
}
a[k]= aval;
}
template<class S, class T>inlinevoid arrInsert(constint k, int&sz, S a[], const S aval, T b[], const T bval){
int i;
sz++;
for(i=sz-1;i>k;i--){
a[i]= a[i-1];
}
for(i=sz-1;i>k;i--){
b[i]= b[i-1];
}
a[k]= aval;
b[k]= bval;
}
template<class S, class T, class U>inlinevoid arrInsert(constint k, int&sz, S a[], const S aval, T b[], const T bval, U c[], const U cval){
int i;
sz++;
for(i=sz-1;i>k;i--){
a[i]= a[i-1];
}
for(i=sz-1;i>k;i--){
b[i]= b[i-1];
}
for(i=sz-1;i>k;i--){
c[i]= c[i-1];
}
a[k]= aval;
b[k]= bval;
c[k]= cval;
}
template<class S, class T, class U, class V>inlinevoid arrInsert(constint k, int&sz, S a[], const S aval, T b[], const T bval, U c[], const U cval, V d[], const V dval){
int i;
sz++;
for(i=sz-1;i>k;i--){
a[i]= a[i-1];
}
for(i=sz-1;i>k;i--){
b[i]= b[i-1];
}
for(i=sz-1;i>k;i--){
c[i]= c[i-1];
}
for(i=sz-1;i>k;i--){
d[i]= d[i-1];
}
a[k]= aval;
b[k]= bval;
c[k]= cval;
d[k]= dval;
}
struct unionFind{
int*d;
int N;
int M;
inlinevoidmalloc(constint n){
d =(int*)std::malloc(n*sizeof(int));
M = n;
}
inlinevoidmalloc(constint n, constint fg){
d =(int*)std::malloc(n*sizeof(int));
M = n;
if(fg){
init(n);
}
}
inlinevoidfree(void){
std::free(d);
}
inlinevoid walloc(constint n, void**mem=&wmem){
walloc1d(&d, n, mem);
M = n;
}
inlinevoid walloc(constint n, constint fg, void**mem=&wmem){
walloc1d(&d, n, mem);
M = n;
if(fg){
init(n);
}
}
inlinevoid init(constint n){
int i;
N = n;
for(i=(0);i<(n);i++){
d[i]=-1;
}
}
inlinevoid init(void){
init(M);
}
inlineint get(int a){
int t = a;
int k;
while(d[t]>=0){
t=d[t];
}
while(d[a]>=0){
k=d[a];
d[a]=t;
a=k;
}
return a;
}
inlineint connect(int a, int b){
if(d[a]>=0){
a=get(a);
}
if(d[b]>=0){
b=get(b);
}
if(a==b){
return0;
}
if(d[a]< d[b]){
d[a]+= d[b];
d[b]= a;
}
else{
d[b]+= d[a];
d[a]= b;
}
return1;
}
inlineint operator()(int a){
return get(a);
}
inlineint operator()(int a, int b){
return connect(a,b);
}
inlineint& operator[](constint a){
return d[a];
}
inlineint size(int a){
a = get(a);
return-d[a];
}
inlineint sizeList(int res[]){
int i;
int sz=0;
for(i=(0);i<(N);i++){
if(d[i]<0){
res[sz++]=-d[i];
}
}
return sz;
}
}
;
#define main dummy_main
int main(){
wmem = memarr;
return0;
}
#undef main
int N;
int X[1000];
int Y[1000];
int m;
int a[1000000];
int b[1000000];
int c[1000000];
class Solution{
public:
int minCostConnectPoints(vector<vector<int>>& points){
int i;
dummy_main();
int res =0;
unionFind uf;
N = points.size();
for(i=(0);i<(N);i++){
{
auto Q5VJL1cS =(points[i][0]);
auto e98WHCEY =( points[i][1]);
X[i]= Q5VJL1cS;
Y[i]= e98WHCEY;
}
}
m =0;
for(i=(0);i<(N);i++){
int j;
for(j=(i+1);j<(N);j++){
arrInsert(m, m, a, i, b, j, c, abs(X[i]-X[j])+abs(Y[i]-Y[j]));
}
}
sortA_L(m, c, a, b);
uf.walloc(N, 1);
for(i=(0);i<(m);i++){
if(uf(a[i],b[i])){
res += c[i];
}
}
return res;
}
}
;
// cLay varsion 20200913-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int N, X[1000], Y[1000];
// int m, a[1d6], b[1d6], c[1d6];
//
// class Solution {
// public:
// int minCostConnectPoints(vector<vector<int>>& points) {
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status