WA * 4。给个 hack 就行。
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
typedef long long ll;
using namespace std;
const int N = 105;
int n,m,k;
char ch[N * 2][N * 2];
vector<pair<int,int> > v;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m >> k;
for(int i = 1;i <= 2 * n + 1;i++){
for(int j = 1;j <= 2 * m + 1;j++){
if(i == 1 || i == 2 * n + 1 || j == 1 || j == 2 * m + 1)ch[i][j] = '+';
else if(i % 2 == 0 && j % 2 == 0)ch[i][j] = 'o';
else if(i % 2 == 1 && j % 2 == 1)ch[i][j] = '+';
else ch[i][j] = '.';
}
}
ch[1][2 * m] = 'S',ch[2 * n + 1][2 * m] = 'G';
if(k < n || (k - n) % 2)return cout << "No",0;
int t = (k - n);
if(m != 1){
if((n % 2 && k >= (m - 1) * (n - 1) + n)){
int t1 = t / (2 * (m - 1));
for(int i = 1;i <= t1;i++){
for(int j = 4;j <= 2 * m;j += 2)ch[-1 + i * 4][j] = '-';
if(i != t1)for(int j = 2;j <= 2 * m - 2;j += 2)ch[1 + i * 4][j] = '-';
}
int lst = 0;
for(int i = 1;i <= m;i++){
if(i * 2 + (m - i) == k - m * (n - 2)){
lst = i;
break;
}
}
for(int i = 1;i <= lst;i++){
if(i & 1)ch[2 * n - 2][i * 2 + 1] = '|';
else ch[2 * n][i * 2 + 1] = '|';
}
ch[2 * n - 2][2 * m + 1] = '+';
for(int i = lst * 2 + 2;i <= (lst % 2 ? 2 * m : 2 * m - 1);i += 2)ch[2 * n - 1][i] = '-';
if(lst % 2 == 0)ch[2 * n][2 * m - 1] = '|';
}else{
int t1 = t / (2 * (m - 1));
for(int i = 1;i <= t1;i++){
for(int j = 4;j <= 2 * m;j += 2)ch[-1 + i * 4][j] = '-';
for(int j = 2;j <= 2 * m - 2;j += 2)ch[1 + i * 4][j] = '-';
}
int pos = -1 + (t1 + 1) * 4;
t1 = t % (2 * (m - 1)) / 2;
bool flag = (!t1);
int i;
for(i = 2 * m;i >= 2;i -= 2){
if(!t1)break;
t1--;
ch[pos][i] = '-';
if(pos + 2 != 2 * n + 1)ch[pos + 2][i - 2] = '-';
if(!t1)break;
}
if(flag){
pos--;
for(int i = pos;i <= 2 * n + 1;i += 2)ch[i][2 * m - 1] = '|';
}else{
ch[pos - 1][i - 3] = ch[pos + 1][i - 3] = '|';
pos += 3;
for(int i = pos;i <= 2 * n + 1;i += 2)ch[i][2 * m - 1] = '|';
}
}
}
cout << "Yes\n";
for(int i = 1;i <= 2 * n + 1;i++){
for(int j = 1;j <= 2 * m + 1;j++){
cout << ch[i][j];
}
cout << endl;
}
}