Codeforces Round #302 (Div. 2)——A—— Set of Strings

You are given a string q. A sequence of k strings s1, s2, ..., sk is called beautiful, if the concatenation of these strings is string q(formally, s1 + s2 + ... + sk = q) and the first characters of these strings are distinct.

Find any beautiful sequence of strings or determine that the beautiful sequence doesn't exist.

Input

The first line contains a positive integer k (1 ≤ k ≤ 26) — the number of strings that should be in a beautiful sequence.

The second line contains string q, consisting of lowercase Latin letters. The length of the string is within range from 1 to 100, inclusive.

Output

If such sequence doesn't exist, then print in a single line "NO" (without the quotes). Otherwise, print in the first line "YES" (without the quotes) and in the next k lines print the beautiful sequence of strings s1, s2, ..., sk.

If there are multiple possible answers, print any of them.

Sample test(s)
input
1
abca
output
YES
abca
input
2
aaacas
output
YES
aaa
cas
input
4
abc
output
NO
Note

In the second sample there are two possible answers: {"aaaca", "s"} and {"aaa", "cas"}.

大意:给出一个串和一个数字n,问你能不能把大串分成n个小串,满足每一个小串的第一个字母都是不同的

我的搓比代码。先确定最多有多少个串能分,然后标记每一个串的起点,然后根据这个起点进行输出,用vis来标记这个字母是否被访问过

#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

char s[150];

int main()

{

    int n;

    int b[30];

    memset(b,-1,sizeof(b));

    scanf("%d",&n);

    getchar();

    scanf("%s",s);

    int ans = 0;

    for(int i = 0 ; i < strlen(s) ;i++)

        if(b[s[i]-'a'] == -1){

            ans++;

            b[s[i]-'a'] = i;

        }

    int k = 0;

    int c[30];

    int vis[30];

    memset(vis,0,sizeof(vis));

    if(ans >= n){

        printf("YES\n");

    for(int i = 0 ; i < strlen(s); i++){

        if(b[s[i]-'a']!=-1 && vis[s[i]-'a'] == 0){

            c[k++] = b[s[i]-'a'];

            vis[s[i]-'a'] = 1;

        }

        if(k  == n) break;

    }

    for(int i = 0; i < n -1  ;i++){

        for(int j = c[i] ; j < c[i+1] ; j++)

            printf("%c",s[j]);

        printf("\n");

    }

    for(int j = c[n-1]; j < strlen(s); j++)

        printf("%c",s[j]);

    printf("\n");

    }

    else printf("NO\n");

    return 0;

}

 

你可能感兴趣的:(codeforces)