# HackerRank Absolute Permutation problem solution

In this HackerRank Absolute Permutation problem, you have Given n and k, print the lexicographically smallest absolute permutation P. If no absolute permutation exists, print -1.

## Problem solution in Python programming.

```#include <bits/stdc++.h>

using namespace std;

#define pb push_back
#define mp make_pair
#define REP(i, n) for (int i = 0; i < (int)(n); ++i)
typedef long long LL;
typedef pair<int, int> PII;

int tt;
int n, k;
int a[100000];

int main() {
scanf("%d", &tt);
REP(test, tt) {
scanf("%d%d", &n, &k);
if (k == 0) {
REP(i, n) printf("%d ", i + 1);
printf("\n");
continue;
}
if (n % (2 * k) != 0) {
printf("-1\n");
continue;
}
for (int pos = 0; pos < n; pos += 2 * k) {
REP(i, k) {
a[pos + i] = pos + k + i + 1;
a[pos + k + i] = pos + i + 1;
}
}
REP(i, n) printf("%d ", a[i]);
printf("\n");
}
return 0;
}```

## Problem solution in Java Programming.

```import java.io.*;
import java.util.*;

public class Solution {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
for (int tt = 0; tt < t; tt++) {
solve(in.nextInt(), in.nextInt());
System.out.println();
}
}
public static void solve( int n, int k) {
if (k == 0) {
for (int i = 1; i <= n; i++) {
System.out.print(i + " ");
}
return;
}
if (n%2 == 1 || k > n/2) {
System.out.print("-1");
return;
}
solveAns(n,k);
}
static void solveAns(int n, int k) {
boolean seen[] = new boolean[n+1];
// 1 based indexing reminder!
StringBuilder ans = new StringBuilder();
for (int i = 1; i <= n; i++) {
// try subtracting
if ((i-k) > 0 && !seen[(i-k)]) {
seen[(i-k)] = true;
ans.append(i-k);
ans.append(' ');
} else if ((i+k) <= n && !seen[(i+k)]) {
seen[(i+k)] = true;
ans.append(i+k);
ans.append(' ');
} else {
// impossible?
System.out.print("-1");
return;
}
}
System.out.print(ans.toString());
}
}```

### Problem solution in C++ programming.

```#include <iostream>
#include <stdio.h>
#include <string>
#include <algorithm>
#include <stdlib.h>
#include <memory.h>
using namespace std;
const int maxn=1000010;
int test,n,k,a[maxn];
bool kt[maxn];

int main()
{
cin>>test;
for (int t=1;t<=test;++t)
{
memset(kt,false,sizeof(kt));
cin>>n>>k;
if (k==0) for (int i=1;i<=n;++i) cout<<i<<" ";
else
if (n%(2*k)!=0) cout<<-1;
else
{
for (int i=1;i<=n;++i) a[i]=i;
for (int i=1;i<=n;++i)
if (!kt[i])
{
swap(a[i],a[i+k]);
kt[i]=true;
kt[i+k]=true;
}
for (int i=1;i<=n;++i) cout<<a[i]<<" ";
}
cout<<"\n";
}
return 0;
}```

### Problem solution in C programming.

```#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {

/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int t;
scanf("%d",&t);
while(t--)
{
int n,k;
scanf("%d %d",&n,&k);
int i,a[n+1],flag=0;
if(k==0)
{
for(i=1;i<=n;i++)
printf("%d ",i);
printf("\n");
}
else
{
for(i=1;i<k+1;i++)
{
int temp=((n-i)/k)+1;
if(temp%2)
{
flag=1;
break;
}
}
if(flag==1)
printf("-1\n");
else
{
int j;
for(i=1;i<k+1;i++)
{
for(j=i;j<=n-k;j+=2*k)
{
a[j]=j+k;
a[j+k]=j;
}
}
for(i=1;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
}
}

}
return 0;
}```

### Problem solution in JavaScript programming.

```process.stdin.resume();
process.stdin.setEncoding('ascii');

var input_stdin = "";
var input_stdin_array = "";
var input_currentline = 0;

process.stdin.on('data', function (data) {
input_stdin += data;
});

process.stdin.on('end', function () {
input_stdin_array = input_stdin.split("\n");
main();
});

return input_stdin_array[input_currentline++];
}

/////////////// ignore above this line ////////////////////

function main() {
for(var a0 = 0; a0 < t; a0++){
var n = parseInt(n_temp[0]);
var k = parseInt(n_temp[1]);

if(k==0){
console.log(Array(n).fill(0).map((e,i)=>i+1).toString().replace(/,/g," "));
}
else if((n/k)%2==0){
let ar = Array(n).fill(0).map((e,i)=>i+1);
for(let i = 0; i < n; i+=2*k){
let j = i + k;
let L = ar.slice(i,i+k);
let R = ar.slice(j,j+k);
ar.splice(i,k,...R);
ar.splice(j,k,...L);
}
console.log(ar.toString().replace(/,/g," "));
}
else{
console.log(-1);
}

}

}```