#include <bits/stdc++.h>
#include "encoder.h"
using namespace std;
using ll = long long;
/*int sz, arr[100];
void send(int x) { arr[sz++] = x; cout << "+" << x << "\n"; }
void output(int x) { cout << x << " "; }*/
void encode(int n, int a[]) {
int c[n];
vector < int > b;
for (int i = 0; i < n; i++) b.push_back(a[i]);
sort(b.begin(), b.end());
b.resize(unique(b.begin(), b.end()) - b.begin());
for (int i = 0; i < n; i++) c[i] = lower_bound(b.begin(), b.end(), a[i]) - b.begin();
for (int i = 0; i < n; i++) {
send(a[i]);
send(a[i]);
send(a[i]);
send(a[i]);
}
int sl = 0, sh = 0;
for (int i = 0; i < n; i++) {
sl += (c[i] % 8) + 1;
send(sl - 1);
send(sl - 1);
sh += (c[i] / 8) + 1;
send(sh - 1);
}
}
void decode(int n, int m, int a[]) {
sort(a, a + m);
vector < int > v, l, h;
int i = 0, sl = 0, sh = 0;
while (i < m) {
int k = 1;
while (i + 1 < m && a[i + 1] == a[i]) i++, k++;
if (k & 4) v.push_back(a[i]);
int w = a[i] + 1;
if (k & 2) { l.push_back(w - sl - 1); sl = w; }
if (k & 1) { h.push_back(w - sh - 1); sh = w; }
i++;
}
for (int i = 0; i < n; i++) output(v[l[i] + h[i] * 8]);
}
/*int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) cin >> a[i];
encode(n, a);
decode(n, sz, arr);
}*/
#include <bits/stdc++.h>
#include "decoder.h"
using namespace std;
using ll = long long;
/*int sz, arr[100];
void send(int x) { arr[sz++] = x; cout << "+" << x << "\n"; }
void output(int x) { cout << x << " "; }*/
void encode(int n, int a[]) {
int c[n];
vector < int > b;
for (int i = 0; i < n; i++) b.push_back(a[i]);
sort(b.begin(), b.end());
b.resize(unique(b.begin(), b.end()) - b.begin());
for (int i = 0; i < n; i++) c[i] = lower_bound(b.begin(), b.end(), a[i]) - b.begin();
for (int i = 0; i < n; i++) {
send(a[i]);
send(a[i]);
send(a[i]);
send(a[i]);
}
int sl = 0, sh = 0;
for (int i = 0; i < n; i++) {
sl += (c[i] % 8) + 1;
send(sl - 1);
send(sl - 1);
sh += (c[i] / 8) + 1;
send(sh - 1);
}
}
void decode(int n, int m, int a[]) {
sort(a, a + m);
vector < int > v, l, h;
int i = 0, sl = 0, sh = 0;
while (i < m) {
int k = 1;
while (i + 1 < m && a[i + 1] == a[i]) i++, k++;
if (k & 4) v.push_back(a[i]);
int w = a[i] + 1;
if (k & 2) { l.push_back(w - sl - 1); sl = w; }
if (k & 1) { h.push_back(w - sh - 1); sh = w; }
i++;
}
for (int i = 0; i < n; i++) output(v[l[i] + h[i] * 8]);
}
/*int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) cin >> a[i];
encode(n, a);
decode(n, sz, arr);
}*/