Little penguin Polo adores strings. But most of all he adores strings of length n.
One day he wanted to find a string that meets the following conditions:
- The string consists of n lowercase English letters (that is, the string's length equals n), exactly k of these letters are distinct.
- No two neighbouring letters of a string coincide; that is, if we represent a string as s = s1s2... sn, then the following inequality holds,si ≠ si + 1(1 ≤ i < n).
- Among all strings that meet points 1 and 2, the required string is lexicographically smallest.
Help him find such string or state that such string doesn't exist.
String x = x1x2... xp is lexicographically less than string y = y1y2... yq, if either p < q and x1 = y1, x2 = y2, ... , xp = yp, or there is such number r (r < p, r < q), that x1 = y1, x2 = y2, ... , xr = yr and xr + 1 < yr + 1. The characters of the strings are compared by their ASCII codes.
A single line contains two positive integers n and k (1 ≤ n ≤ 106, 1 ≤ k ≤ 26) — the string's length and the number of distinct letters.
In a single line print the required string. If there isn't such string, print "-1" (without the quotes).
7 4
ababacd
4 7
-1
大水题。
完整代码:
/*30ms,0KB*/
#include<cstdio>
int main()
{
int n, k;
scanf("%d%d", &n, &k);
if (n < k)
printf("-1");
else if (n == k)
for (int i = 97; i < 97 + k; ++i)
putchar(i);
else if (k == 1)
printf("-1");
else
{
n -= k - 2;
if (n & 1)
{
n = (n - 1) >> 1;
for (int i = 0; i < n; ++i)
{
putchar('a');
putchar('b');
}
putchar('a');
}
else
{
n >>= 1;
for (int i = 0; i < n; ++i)
{
putchar('a');
putchar('b');
}
}
for (int i = 99; i < 97 + k; ++i)
putchar(i);
}
return 0;
}