#include <bits/stdc++.h>

using namespace std;

typedef long long ll; const int N = 50000; ll elapsed_time[ N + 1 ]; typedef vector< int > vector_t;

struct pending_tasks_t: vector_t
{
    int order( int i )
    {
        return lower_bound( begin(), end(), i ) - begin();
    }

    void remove_task( int i )
    {
        erase( lower_bound( begin(), end(), i ) );
    }
};

struct pending_tasks_map_t: map< int, vector_t >
{
    void round_robin( ll time, pending_tasks_t& pending_tasks )
    {
        ll p = pending_tasks.size();

        for( int key, elapsed_cycles = 2; not empty(); elapsed_cycles = key + 1 )
        {
            auto it = begin(); time += ( ( key = it->first ) - elapsed_cycles ) * p + 1;

            for( auto i: it->second )
                elapsed_time[ i ] = time + pending_tasks.order( i );

            for( auto i: it->second )
                pending_tasks.remove_task( i );

            time += p - 1, p -= it->second.size(), erase( it );
        }
    }
};

int main()
{
    ios_base::sync_with_stdio( false ), cin.tie( nullptr ), cout.tie( nullptr );

    int n; cin >> n; pending_tasks_t pending_tasks; pending_tasks_map_t pending_tasks_map;

    for( int i = 1; i <= n; i++ )
    {
        int t; cin >> t;

        if ( t == 1 )
            elapsed_time[ i ] = i;
        else
            pending_tasks_map[ t ].push_back( i ), pending_tasks.push_back( i );
    }

    pending_tasks_map.round_robin( n, pending_tasks );

    for( int i = 1; i <= n; i++ )
        cout << elapsed_time[ i ] << '\n';
}