#include "treasure.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> encode(vector<pair<int, int>> P) {
int n = P.size();
vector<int> ret;
sort(P.begin(), P.end());
for (int i = 0; i < n; i++) ret.push_back(P[i].first);
vector<pair<int, int>> v;
for (int i = 0; i < n; i++) v.push_back({P[i].second, i+1});
sort(v.begin(), v.end());
int offset = 5e8;
for (int i = 0; i < n; i++) ret.push_back(v[i].first+offset);
offset = 1e9;
for (int i = 0; i < n; i++) {
if (i == 0) ret.push_back(v[i].second+offset);
else ret.push_back(ret.back()+v[i].second);
}
return ret;
}
vector<pair<int, int>> decode(vector<int> S) {
sort(S.begin(), S.end());
vector<pair<int, int>> ans;
int n = S.size()/3;
for (int i = 0; i < n; i++) ans.push_back({S[i], 0});
vector<int> y;
int offset = 5e8;
for (int i = n; i < 2*n; i++) y.push_back(S[i]-offset);
vector<int> idx;
offset = 1e9;
idx.push_back(S[2*n]-offset);
for (int i = 2*n+1; i < S.size(); i++) idx.push_back(S[i]-S[i-1]);
for (int i = 0; i < n; i++)
ans[idx[i]-1].second = y[i];
return ans;
}