#include #include #include #include #include #include #include #include #include #include // #include "Src/Number/IntegerDivision.hpp" // #include "Src/Utility/BinarySearch.hpp" // #include "Src/Sequence/CompressedSequence.hpp" // #include "Src/Sequence/RunLengthEncoding.hpp" // #include "Src/Algebra/Group/AdditiveGroup.hpp" // #include "Src/DataStructure/FenwickTree/FenwickTree.hpp" // #include "Src/DataStructure/SegmentTree/SegmentTree.hpp" // #include "Src/DataStructure/DisjointSetUnion/DisjointSetUnion.hpp" // #include "Src/DataStructure/Heap/BinaryHeap.hpp" namespace zawa {} using namespace zawa; // #include "atcoder/modint" // using mint = atcoder::modint998244353; // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #pragma GCC target("avx2") // #pragma GCC optimize("O3") // #pragma GCC optimize("unroll-loops") using namespace std; template ostream& operator<<(ostream& os, const pair& p) { os << '(' << p.first << ',' << p.second << ')'; return os; } template ostream& operator<<(ostream& os, const vector& v) { for (int i = 0 ; i < ssize(v) ; i++) os << v[i] << (i + 1 == ssize(v) ? "" : " "); return os; } /* * */ int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(0); cout << fixed << setprecision(20); #if !defined DEBUG string S; cin >> S; const int N = ssize(S); if (S == string(N,'.')) { cout << string(N,'S') << '\n'; return 0; } if (S.front() == '.') S.front() = 'G'; if (S.back() == '.') S.back() = 'S'; for (int i = 0 ; i + 2 < N ; i++) if (S[i] != '.' and S[i+1] == '.' and S[i+2] == '.') S[i+1] = S[i]; for (int i = N - 1 ; i - 2 >= 0 ; i--) if (S[i] != '.' and S[i-1] == '.' and S[i-2] == '.') S[i-1] = S[i]; for (int i = 0 ; i < N ; i++) if (S[i] == '.') { assert(0 <= i - 1 and i + 1 < N); if (S[i-1] == S[i+1]) S[i] = S[i-1]; else if (S[i-1] == 'S' and S[i+1] == 'G') S[i] = 'G'; else if (S[i-1] == 'S' and S[i+1] == 'K') S[i] = 'K'; else if (S[i-1] == 'G' and S[i+1] == 'K') S[i] = 'G'; else if (S[i-1] == 'K' and S[i+1] == 'S') S[i] = 'K'; else if (S[i-1] == 'K' and S[i+1] == 'G') S[i] = 'K'; else S[i] = 'S'; } assert(ranges::count(S,'.') == 0); for (int i = 0 ; i + 2 < N ; i++) if (S[i] == 'S' and S[i+1] == 'K' and S[i+2] == 'G') { cout << "No\n"; return 0; } cout << "Yes\n"; cout << S << endl; #else mt19937_64 mt{random_device{}()}; for (int testcase = 0 ; ; ) { cerr << "----------" << ++testcase << "----------" << endl; auto a = solve(), b = naive(); if (a != b) { // print testcase cerr << "you: " << a << endl; cout << "correct: " << b << endl; exit(0); } } #endif }