# Anti-palindrome strings | Hackerearth practice problem solution

Problem:-

You are given a string

$S$

containing only lowercase alphabets. You can swap two adjacent characters any number of times (including 0).

A string is called anti-palindrome if it is not a palindrome. If it is possible to make a string anti-palindrome, then find the lexicographically smallest anti-palindrome. Otherwise, print

$-1$

.

Input format

• The first line contains a single integer
$T$

denoting the number of test cases. The description of

$T$

test cases follows.

• Each line contains a string
$S$

of lower case alphabets only.

Output format

For each test case, print the answer in a new line.

Constraints

$1\le T\le 100$

$2\le |S|\le 2×{10}^{5}$

$S$

contains only lowercase alphabets.

Sample Input
`4bpcppdeepzyx`
Sample Output
`bcp-1deepxyz`
Time Limit: 1
Memory Limit: 256
Source Limit:
Explanation
• In the first test case, you can create “bcp” which is not a palindrome and it is a lexicographically-smallest string.
• In the second test case, you cannot form any anti palindrome.

Code:-

in the starting i use three lines:-

ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

this is only for reducing the time limit of the execution

Solution:-

#include<bits/stdc++.h>
using namespace std;

int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t;
cin>>t;
string str1,str2;
while(t–)
{
cin>>str1;
str2=str1;
reverse(str1.begin(),str1.end());
if(str1==str2)
cout<<“-1”<<endl;
else
{
sort(str1.begin(),str1.end());
cout<<str1<<endl;
}
}
return 0;
}