Pagini recente » Cod sursa (job #726162) | Cod sursa (job #1961265) | Cod sursa (job #75768) | Cod sursa (job #3170837) | Cod sursa (job #3123517)
#include <iostream>
using namespace std;
const int maxLen = 100005;
int n, k, test, minst[maxLen], maxdr[maxLen];
string str;
void solve_basic();
void solve2();
void solve3();
void solve()
{
test++;
cout << "Case #" << test << ": ";
cin >> k >> str;
n = str.size();
if(k > 3)
solve_basic();
if(k == 3)
solve3();
if(k == 2)
solve2();
cout << '\n';
}
void solve3()
{
/// NIMIC
}
void solve2()
{
int litera = str[0] - 'A' + 1;
bool onlyOneLetter = 1;
minst[0] = str[0] - 'A' + 1;
for(int i = 1; i < n; i++)
{
minst[i] = min(minst[i - 1], str[i] - 'A' + 1);
if(str[i] - 'A' + 1 != litera)
onlyOneLetter = 0;
}
if(onlyOneLetter)
{
cout << "POSSIBLE\n";
for(int i = 0; i < n - 1; i++)
cout << str[i];
cout << ' ' << str[n - 1];
return;
}
for(int i = n - 1; i >= 0; i--)
maxdr[i] = max(maxdr[i + 1], str[i] - 'A' + 1);
int poz = -1;
for(int i = 1; i < n; i++)
{
if(minst[i - 1] >= maxdr[i])
{
cout << "POSSIBLE\n";
for(int j = 0; j < i; j++)
cout << str[j];
cout << ' ';
for(int j = i; j < n; j++)
cout << str[j];
return;
}
}
}
void solve_basic()
{
int poz;
bool sorted = 1;
for(int i = 1; i < n; i++)
{
if(str[i] < str[i - 1])
{
sorted = 0;
poz = i;
}
}
if(!sorted)
{
cout << "POSSIBLE\n";
k -= 4;
for(int i = 0; i < poz - 1; i++)
{
cout << str[i];
if(k && i != poz - 2)
{
cout << ' ';
k--;
}
}
cout << ' ';
cout << str[poz - 1] << ' ';
cout << str[poz] << ' ';
for(int i = poz + 1; i < n; i++)
{
cout << str[i];
if(k)
{
cout << ' ';
k--;
}
}
}
else
{
if(k == n)
{
cout << "IMPOSSIBLE\n";
return;
}
int frecv = 1, poz = -1;
for(int i = 1; i < n; i++)
{
if(str[i] == str[i - 1])
frecv++;
else
frecv = 1;
if(frecv >= 3)
poz = i;
}
if(poz == -1)
{
cout << "IMPOSSIBLE\n";
return;
}
cout << "POSSIBLE\n";
k -= 4;
for(int i = 0; i < poz - 2; i++)
{
cout << str[i];
if(k && i != poz - 3)
{
cout << ' ';
k--;
}
}
cout << ' ';
cout << str[poz - 2] << str[poz - 1] << ' ';
cout << str[poz] << ' ';
for(int i = poz + 1; i < n; i++)
{
cout << str[i];
if(k)
{
cout << ' ';
k--;
}
}
}
}
int main()
{
#ifdef LOCAL
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
#endif // LOCAL
int nr_teste;
cin >> nr_teste;
while(nr_teste--)
solve();
return 0;
}