E. A Bit Similar SOLUTION Code Forces

E. A Bit Similar SOLUTION Code Forces

Educational Codeforces Round 101 (Rated for Div. 2)

Let’s call two strings a and b (both of length k) a bit similar if they have the same character in some position, i. e. there exists at least one i∈[1,k] such that ai=bi.

You are given a binary string s of length n (a string of n characters 0 and/or 1) and an integer k. Let’s denote the string s[i..j] as the substring of s starting from the i-th character and ending with the j-th character (that is, s[i..j]=sisi+1si+2…sj−1sj).

Let’s call a binary string t of length k beautiful if it is a bit similar to all substrings of s having length exactly k; that is, it is a bit similar to s[1..k],s[2..k+1],…,s[n−k+1..n].

Your goal is to find the lexicographically smallest string t that is beautiful, or report that no such string exists. String x is lexicographically less than string y if either x is a prefix of y (and x≠y), or there exists such i (1≤i≤min(|x|,|y|)), that xi<yi, and for any j (1≤j<i) xj=yj.

 

Input

The first line contains one integer q (1≤q≤10000) — the number of test cases. Each test case consists of two lines.

The first line of each test case contains two integers n and k (1≤k≤n≤106). The second line contains the string s, consisting of n characters (each character is either 0 or 1).

It is guaranteed that the sum of n over all test cases does not exceed 106.

 

Output

For each test case, print the answer as follows:

if it is impossible to construct a beautiful string, print one line containing the string NO (note: exactly in upper case, you can’t print No, for example);

otherwise, print two lines. The first line should contain the string YES (exactly in upper case as well); the second line — the lexicographically smallest beautiful string, consisting of k characters 0 and/or 1.

Example

input

7

4 2

0110

4 2

1001

9 3

010001110

9 3

101110001

10 3

0101110001

10 10

1111111111

11 10

11111111110

 

output

YES

11

YES

00

YES

010

YES

101

NO

YES

0000000001

YES

0000000010

 

SOLUTION:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

typedef pair<ll,ll> pa;

#define fst first

#define snd second

#define pb push_back

#define lld I64d

const int maxn=1500005,maxm=525;

const double pi=acos(-1.0);

const ll mod=1000000007LL,md=998244353LL;

const double eps=1e-12;

int n,k;

char c[maxn];

int v[maxn];

int vv[maxn];

 

int main()

{

int T;scanf(“%d”,&T);

for(int ca=1;ca<=T;++ca)

{

scanf(“%d %d %s”,&n,&k,c);

if(k<=20)

{

for(int i=0;i<=n;++i) v[i]=0;

int cur=0;

for(int i=0;i<k;++i)

{

cur<<=1;

if(c[i]==’0′) cur|=1;

}

v[cur]=1;

for(int i=1;i+k<=n;++i)

{

cur%=(1<<(k-1));

cur<<=1;cur|=(c[i+k-1]==’0′);

if(cur<=n) v[cur]=1;

}

int i;

for(i=0;i<=min(n,(1<<k)-1);++i)

{

if(!v[i])

{

printf(“YESn”);

for(int j=k-1;j>=0;–j)

{

printf(“%d”,i>>j&1);

}

printf(“n”);break;

}

}

if(i>min(n,(1<<k)-1)) printf(“NOn”);

continue;

}

for(int i=0;i<=n;++i) v[i]=vv[i]=0;

for(int i=0;i<n;++i)

{

if(c[i]==’0′)

{

v[max(i-(k-21),0)]–;

v[i+1]++;

}

}

for(int i=1;i<=n;++i) v[i]+=v[i-1];

for(int i=0;i+k<=n;++i)

{

if(v[i]<0) continue;

int cur=0;

for(int j=i+k-20;j<i+k;++j)

{

cur=cur<<1|(c[j]==’0′);

}

if(cur<=n) {vv[cur]=1;}

}

printf(“YESn”);

for(int i=0;i<=n;++i)

{

if(!vv[i])

{

for(int j=0;j<k-20;++j) printf(“0”);

for(int j=19;j>=0;–j) printf(“%d”,i>>j&1); 

printf(“n”);break;

}

}

}

return 0;

}

 

RELATED :

A. Regular Bracket Sequence SOLUTION CodeForces

B. Red and Blue SOLUTION CodeForces

C. Building a Fence SOLUTION CodeForces

D. Ceil Divisions SOLUTION CodeForces

E. A Bit Similar SOLUTION CodeForces

F. Power Sockets SOLUTION CodeForces

Leave a Comment

close
error: Content is protected !!