// Readiz lesson: complete C++17 local exercise.
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
struct Compressed {vector<long long> coords; vector<int> rank;};
Compressed compressValues(const vector<long long>& a) {
    vector<long long> coords=a;
    sort(coords.begin(),coords.end());
    coords.erase(unique(coords.begin(),coords.end()),coords.end());
    vector<int> rank;
    for(long long value:a)rank.push_back((int)(lower_bound(coords.begin(),coords.end(),value)-coords.begin()));
    return {coords,rank};
}
int main() {
    ios::sync_with_stdio(false);cin.tie(nullptr);
    int n;
    if(!(cin>>n) || n<1 || n>200000)return 1;
    vector<long long>a(n);
    for(auto &v:a)if(!(cin>>v) || v < -1000000000000LL || v > 1000000000000LL)return 1;
    auto c=compressValues(a);
    cout<<c.coords.size()<<'\n';
    for(int i=0;i<n;i++)cout<<(i?" ":"")<<c.rank[i];
    cout<<'\n';
    for(int i=0;i<(int)c.coords.size();i++)cout<<(i?" ":"")<<c.coords[i];
    cout<<'\n';
}
