#include <iostream>
using namespace std;
int k(string& s)
{
int ks = 0;
int pos = s.find('G');
for(int p = pos; p >= 0 && s[p] != 'D'; --p)
if (s[p] == 'K') { s[p] = ' '; ++ks; }
for(int p = pos; p < s.size() && s[p] != 'D'; ++p)
if (s[p] == 'K') { s[p] = ' '; ++ks; }
return ks;
}
bool l(const string& s, int keys);
bool r(const string& s, int keys);
bool l(const string& s, int keys)
{
int pos = s.find('G');
if (pos == 0 || pos == s.size()-1) return true;
string t = s;
keys += k(t);
int p = pos-1;
for(; p >= 0; --p)
{
if (t[p] == 'D')
{
if (keys > 0)
{
t[p] = ' ';
keys--;
t[p] = 'G';
t[pos] = ' ';
return l(t,keys)||r(t,keys);
}
return false;
}
}
return true;
}
bool r(const string& s, int keys)
{
int pos = s.find('G');
if (pos == 0 || pos == s.size()-1) return true;
string t = s;
keys += k(t);
int p = pos+1;
for(; p < t.size(); ++p)
{
if (t[p] == 'D')
{
if (keys > 0)
{
t[p] = ' ';
keys--;
t[p] = 'G';
t[pos] = ' ';
return l(t,keys)||r(t,keys);
}
return false;
}
}
return true;
}
int main(int argc, char * argv[])
{
string s = "DKDDGKKDDKDD";
cout << (l(s,0)||r(s,0)) << endl;
s = "DDKGDDKKKKKKD";
cout << (l(s,0)||r(s,0)) << endl;
s = "DDDDKKKDDKGDKKDDD";
cout << (l(s,0)||r(s,0)) << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGsoc3RyaW5nJiBzKQp7CiAgICBpbnQga3MgPSAwOwogICAgaW50IHBvcyA9IHMuZmluZCgnRycpOwogICAgZm9yKGludCBwID0gcG9zOyBwID49IDAgJiYgc1twXSAhPSAnRCc7IC0tcCkKICAgICAgICBpZiAoc1twXSA9PSAnSycpIHsgc1twXSA9ICcgJzsgKytrczsgfQogICAgZm9yKGludCBwID0gcG9zOyBwIDwgcy5zaXplKCkgJiYgc1twXSAhPSAnRCc7ICsrcCkKICAgICAgICBpZiAoc1twXSA9PSAnSycpIHsgc1twXSA9ICcgJzsgKytrczsgfQogICAgcmV0dXJuIGtzOwp9CgoKYm9vbCBsKGNvbnN0IHN0cmluZyYgcywgaW50IGtleXMpOwpib29sIHIoY29uc3Qgc3RyaW5nJiBzLCBpbnQga2V5cyk7Cgpib29sIGwoY29uc3Qgc3RyaW5nJiBzLCBpbnQga2V5cykKewogICAgaW50IHBvcyA9IHMuZmluZCgnRycpOwogICAgaWYgKHBvcyA9PSAwIHx8IHBvcyA9PSBzLnNpemUoKS0xKSByZXR1cm4gdHJ1ZTsKICAgIHN0cmluZyB0ID0gczsKICAgIGtleXMgKz0gayh0KTsKICAgIGludCBwID0gcG9zLTE7CiAgICBmb3IoOyBwID49IDA7IC0tcCkKICAgIHsKICAgICAgICBpZiAodFtwXSA9PSAnRCcpCiAgICAgICAgewogICAgICAgICAgICBpZiAoa2V5cyA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRbcF0gPSAnICc7CiAgICAgICAgICAgICAgICBrZXlzLS07CiAgICAgICAgICAgICAgICB0W3BdID0gJ0cnOwogICAgICAgICAgICAgICAgdFtwb3NdID0gJyAnOwogICAgICAgICAgICAgICAgcmV0dXJuIGwodCxrZXlzKXx8cih0LGtleXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCByKGNvbnN0IHN0cmluZyYgcywgaW50IGtleXMpCnsKICAgIGludCBwb3MgPSBzLmZpbmQoJ0cnKTsKICAgIGlmIChwb3MgPT0gMCB8fCBwb3MgPT0gcy5zaXplKCktMSkgcmV0dXJuIHRydWU7CiAgICBzdHJpbmcgdCA9IHM7CiAgICBrZXlzICs9IGsodCk7CiAgICBpbnQgcCA9IHBvcysxOwogICAgZm9yKDsgcCA8IHQuc2l6ZSgpOyArK3ApCiAgICB7CiAgICAgICAgaWYgKHRbcF0gPT0gJ0QnKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGtleXMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0W3BdID0gJyAnOwogICAgICAgICAgICAgICAga2V5cy0tOwogICAgICAgICAgICAgICAgdFtwXSA9ICdHJzsKICAgICAgICAgICAgICAgIHRbcG9zXSA9ICcgJzsKICAgICAgICAgICAgICAgIHJldHVybiBsKHQsa2V5cyl8fHIodCxrZXlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyICogYXJndltdKQp7CiAgICAKICAgIHN0cmluZyBzID0gIkRLRERHS0tEREtERCI7CiAgICBjb3V0IDw8IChsKHMsMCl8fHIocywwKSkgPDwgZW5kbDsKICAgIHMgPSAiRERLR0RES0tLS0tLRCI7CiAgICBjb3V0IDw8IChsKHMsMCl8fHIocywwKSkgPDwgZW5kbDsKICAgIHMgPSAiREREREtLS0RES0dES0tEREQiOwogICAgY291dCA8PCAobChzLDApfHxyKHMsMCkpIDw8IGVuZGw7CiAgICAKfQo=