Problem:
Score : 700 points

Problem Statement

Determine if there exists a sequence obtained by permuting 1,2,...,N that satisfies the following conditions:

The length of its longest increasing subsequence is A.

The length of its longest decreasing subsequence is B.

If it exists, construct one such sequence.

Notes

A subsequence of a sequence P is a sequence that can be obtained by extracting some of the elements in P without changing the order.

A longest increasing subsequence of a sequence P is a sequence with the maximum length among the subsequences of P that are monotonically increasing.

Similarly, a longest decreasing subsequence of a sequence P is a sequence with the maximum length among the subsequences of P that are monotonically decreasing.

Constraints

1 \leq N,A,B \leq 3\times 10^5

All input values are integers.

Input

Input is given from Standard Input in the following format:

N A B

Output

If there are no sequences that satisfy the conditions, print -1.

Otherwise, print N integers. The i-th integer should be the i-th element of the sequence that you constructed.

Sample Input 1

5 3 2

Sample Output 1

2 4 1 5 3

One longest increasing subsequence of this sequence is {2,4,5}, and one longest decreasing subsequence of it is {4,3}.

Sample Input 2

7 7 1

Sample Output 2

1 2 3 4 5 6 7

Sample Input 3

300000 300000 300000

Sample Output 3

-1

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<vector>
#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
#include<map>
#include<functional>
#include<queue>
#include<stack>
#include<string.h>
#include<list>
#include<limits>
#include<bitset>
#include<ctype.h>
#include<set>
using namespace std;
typedef long long int ll;
typedef pair<int,int> P;
const ll MOD=1000000007LL;
const ll INF=1000000000;
const int MAX=100001;
const double EPS=1e-10;
vector<int> ans;
int n,a,b;
void out(){
    for(int i=0;i<n;i++){
        cout<<ans[i];
        if(i==n-1){
            cout<<endl;
        }else{
            cout<<" ";
        }
    }
}
int main(){
    cin>>n>>a>>b;
    if(a+b>n+1){
        cout<<-1<<endl;
        return 0;
    }
    for(int i=1;i<a;i++){
        ans.push_back(i);
    }
    ans.push_back(n);
    if(a==n){
        out();
        return 0;
    }
    for(int i=n-1;i>n-b+1;i--){
        ans.push_back(i);
    }
    ans.push_back(a);
    if(a+b+1==n){
        out();
        return 0;
    } 
    int l=n-a-b-1;
    int u=n-b+1;
    int d=a+1;
    bool f=true;
    while(l>0){
        if(f){
            ans.push_back(u);
            u--;
            f=false;
        }else{
            ans.push_back(d);
            d++;
            f=true;
        }
        l--;
    }
    out();
    return 0;
}