#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <cstring>
using namespace std;
const int maxN = 600000;
vector<int> t[2 * maxN];
int n, a[maxN], b[maxN];
map<int, int> pos;
vector<int> d[maxN];
int p[maxN];
void build(int i, int l, int r) {
if (l == r) {
t[i] = vector<int>(1, b[l]);
} else {
build(2 * i, l, (l + r) / 2);
build(2 * i + 1, (l + r) / 2 + 1, r);
t[i].resize(t[2 * i].size() + t[2 * i + 1].size());
merge(t[2 * i].begin(), t[2 * i].end(), t[2 * i + 1].begin(), t[2 * i + 1].end(), t[i].begin());
}
}
int get(int i, int cl, int cr, int l, int r, int value) {
if (l > r) {
return n;
}
if (cl == l && r == cr) {
int index = upper_bound(t[i].begin(), t[i].end(), value) - t[i].begin();
if (index == t[i].size()) {
return n;
}
return t[i][index];
}
if (l > (cl + cr) / 2) {
return get(2 * i + 1, (cl + cr) / 2 + 1, cr, l, r, value);
}
if (r <= (cl + cr) / 2) {
return get(2 * i, cl, (cl + cr) / 2, l, r, value);
}
int A = get(2 * i, cl, (cl + cr) / 2, l, (cl + cr) / 2, value);
int B = get(2 * i + 1, (cl + cr) / 2 + 1, cr, (cl + cr) / 2 + 1, r, value);
return min(A, B);
}
int main() {
memset(b, -1, sizeof(b));
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
for (int i = n - 1; i >= 0; --i) {
if (pos.count(a[i])) {
b[i] = pos[a[i]];
}
pos[a[i]] = i;
}
build(1, 0, n - 1);
p[n] = n;
d[n] = vector<int>(2, -1);
for (int i = n - 1; i >= 0; --i) {
int j = b[i];
if (j == -1) {
p[i] = p[i + 1];
d[i] = d[i + 1];
continue;
}
int value = get(1, 0, n - 1, i + 1, j - 1, j);
if (value == n) {
p[i] = p[i + 1];
d[i] = d[i + 1];
} else {
p[i] = value;
d[i].push_back(a[i]);
d[i].push_back(a[value]);
}
if (p[i + 1] < p[i]) {
p[i] = p[i + 1];
d[i] = d[i + 1];
}
int k = b[j];
if (k != -1) {
int l = b[k];
if (l != -1 && l < p[i]) {
p[i] = l;
d[i] = vector<int>(2, a[i]);
}
}
}
vector<int> res;
int start = 0;
while (start < n) {
if (p[start] != n) {
res.push_back(d[start][0]);
res.push_back(d[start][1]);
res.push_back(d[start][0]);
res.push_back(d[start][1]);
start = p[start] + 1;
} else {
break;
}
}
printf("%d\n", res.size());
for (int i = 0; i < res.size(); ++i) {
printf("%d ", res[i]);
}
printf("\n");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8Y3N0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbWF4TiA9IDYwMDAwMDsKdmVjdG9yPGludD4gdFsyICogbWF4Tl07CmludCBuLCBhW21heE5dLCBiW21heE5dOwptYXA8aW50LCBpbnQ+IHBvczsKCnZlY3RvcjxpbnQ+IGRbbWF4Tl07CmludCBwW21heE5dOwoKdm9pZCBidWlsZChpbnQgaSwgaW50IGwsIGludCByKSB7CglpZiAobCA9PSByKSB7CgkJdFtpXSA9IHZlY3RvcjxpbnQ+KDEsIGJbbF0pOwoJfSBlbHNlIHsKCQlidWlsZCgyICogaSwgbCwgKGwgKyByKSAvIDIpOwoJCWJ1aWxkKDIgKiBpICsgMSwgKGwgKyByKSAvIDIgKyAxLCByKTsKCQl0W2ldLnJlc2l6ZSh0WzIgKiBpXS5zaXplKCkgKyB0WzIgKiBpICsgMV0uc2l6ZSgpKTsKCQltZXJnZSh0WzIgKiBpXS5iZWdpbigpLCB0WzIgKiBpXS5lbmQoKSwgdFsyICogaSArIDFdLmJlZ2luKCksIHRbMiAqIGkgKyAxXS5lbmQoKSwgdFtpXS5iZWdpbigpKTsKCX0KfQoKaW50IGdldChpbnQgaSwgaW50IGNsLCBpbnQgY3IsIGludCBsLCBpbnQgciwgaW50IHZhbHVlKSB7CglpZiAobCA+IHIpIHsKCQlyZXR1cm4gbjsKCX0KCWlmIChjbCA9PSBsICYmIHIgPT0gY3IpIHsKCQlpbnQgaW5kZXggPSB1cHBlcl9ib3VuZCh0W2ldLmJlZ2luKCksIHRbaV0uZW5kKCksIHZhbHVlKSAtIHRbaV0uYmVnaW4oKTsKCQlpZiAoaW5kZXggPT0gdFtpXS5zaXplKCkpIHsKCQkJcmV0dXJuIG47CgkJfQoJCXJldHVybiB0W2ldW2luZGV4XTsKCX0KCQoJaWYgKGwgPiAoY2wgKyBjcikgLyAyKSB7CgkJcmV0dXJuIGdldCgyICogaSArIDEsIChjbCArIGNyKSAvIDIgKyAxLCBjciwgbCwgciwgdmFsdWUpOwoJfQoJaWYgKHIgPD0gKGNsICsgY3IpIC8gMikgewoJCXJldHVybiBnZXQoMiAqIGksIGNsLCAoY2wgKyBjcikgLyAyLCBsLCByLCB2YWx1ZSk7Cgl9CgkKCWludCBBID0gZ2V0KDIgKiBpLCBjbCwgKGNsICsgY3IpIC8gMiwgbCwgKGNsICsgY3IpIC8gMiwgdmFsdWUpOwoJaW50IEIgPSBnZXQoMiAqIGkgKyAxLCAoY2wgKyBjcikgLyAyICsgMSwgY3IsIChjbCArIGNyKSAvIDIgKyAxLCByLCB2YWx1ZSk7CglyZXR1cm4gbWluKEEsIEIpOwp9CgppbnQgbWFpbigpIHsKCW1lbXNldChiLCAtMSwgc2l6ZW9mKGIpKTsKCXNjYW5mKCIlZCIsICZuKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CgkJc2NhbmYoIiVkIiwgJmFbaV0pOwoJfQoJZm9yIChpbnQgaSA9IG4gLSAxOyBpID49IDA7IC0taSkgewoJCWlmIChwb3MuY291bnQoYVtpXSkpIHsKCQkJYltpXSA9IHBvc1thW2ldXTsKCQl9CgkJcG9zW2FbaV1dID0gaTsKCX0KCWJ1aWxkKDEsIDAsIG4gLSAxKTsKCXBbbl0gPSBuOwoJZFtuXSA9IHZlY3RvcjxpbnQ+KDIsIC0xKTsKCWZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpIHsKCQlpbnQgaiA9IGJbaV07CgkJaWYgKGogPT0gLTEpIHsKCQkJcFtpXSA9IHBbaSArIDFdOwoJCQlkW2ldID0gZFtpICsgMV07CgkJCWNvbnRpbnVlOwoJCX0KCQkKCQlpbnQgdmFsdWUgPSBnZXQoMSwgMCwgbiAtIDEsIGkgKyAxLCBqIC0gMSwgaik7CgkJaWYgKHZhbHVlID09IG4pIHsKCQkJcFtpXSA9IHBbaSArIDFdOwoJCQlkW2ldID0gZFtpICsgMV07CgkJfSBlbHNlIHsKCQkJcFtpXSA9IHZhbHVlOwoJCQlkW2ldLnB1c2hfYmFjayhhW2ldKTsKCQkJZFtpXS5wdXNoX2JhY2soYVt2YWx1ZV0pOwoJCX0KCQkKCQlpZiAocFtpICsgMV0gPCBwW2ldKSB7CgkJCXBbaV0gPSBwW2kgKyAxXTsKCQkJZFtpXSA9IGRbaSArIDFdOwoJCX0KCQkKCQlpbnQgayA9IGJbal07CgkJaWYgKGsgIT0gLTEpIHsKCQkJaW50IGwgPSBiW2tdOwoJCQlpZiAobCAhPSAtMSAmJiBsIDwgcFtpXSkgewoJCQkJcFtpXSA9IGw7CgkJCQlkW2ldID0gdmVjdG9yPGludD4oMiwgYVtpXSk7CgkJCX0KCQl9Cgl9CgkKCXZlY3RvcjxpbnQ+IHJlczsKCWludCBzdGFydCA9IDA7Cgl3aGlsZSAoc3RhcnQgPCBuKSB7CgkJaWYgKHBbc3RhcnRdICE9IG4pIHsKCQkJcmVzLnB1c2hfYmFjayhkW3N0YXJ0XVswXSk7CgkJCXJlcy5wdXNoX2JhY2soZFtzdGFydF1bMV0pOwoJCQlyZXMucHVzaF9iYWNrKGRbc3RhcnRdWzBdKTsKCQkJcmVzLnB1c2hfYmFjayhkW3N0YXJ0XVsxXSk7CgkJCXN0YXJ0ID0gcFtzdGFydF0gKyAxOwoJCX0gZWxzZSB7CgkJCWJyZWFrOwoJCX0KCX0KCXByaW50ZigiJWRcbiIsIHJlcy5zaXplKCkpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCByZXMuc2l6ZSgpOyArK2kpIHsKCQlwcmludGYoIiVkICIsIHJlc1tpXSk7Cgl9CglwcmludGYoIlxuIik7CglyZXR1cm4gMDsKfQ==