wa*16,也许思路有问题
#include <bits/stdc++.h>
#define ll long long
using namespace std;
inline int read(){
char ch=getchar();int f=1,x=0;
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
const double eps=1e-9;
const int N=110,inf=1e9,mod=998244353;
int n,m,k,d[3][2]={{0,-1},{1,0},{0,1}},vis[N][N],tag[N][N];
bool dfs(int x,int y,int k){
if(x==n&&y==m&&k==0){
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
vis[i][j]=tag[i][j];
vis[n][m]=1;
return 1;
}
if(k<0) return 0;
tag[x][y]=1;
for(auto [a,b]:d){
int nx=x+a,ny=y+b;
if(nx>0&&nx<=n&&ny>0&&ny<=m&&n-nx+m-ny==k-1)
return dfs(nx,ny,k-1);
}
bool res=0;
if(x&1){
if(y>1) res=dfs(x,y-1,k-1);
else res=dfs(x+1,y,k-1);
}else{
if(y<m) res=dfs(x,y+1,k-1);
else res=dfs(x+1,y,k-1);
}
tag[x][y]=0;
return res;
}
signed main(){
n=read(),m=read(),k=read()-1;
if(!dfs(1,m,k)){puts("No");exit(0);}
// for(int i=1;i<=n;i++,cerr<<'\n')
// for(int j=1;j<=m;j++) cerr<<vis[i][j]<<' ';
puts("Yes");
for(int i=1;i<=2*m-1;i++) putchar('+');
puts("S+");
for(int i=3;i<=2*n+1;i++){
if(i&1){
int x=(i-1)/2;
printf("+o");
for(int j=1;j<m;j++){
putchar((vis[x][j]^vis[x][j+1])?'|':'.');
putchar('o');
}
puts("+");
}else{
int x=(i-2)/2;
putchar('+');
for(int j=1;j<=m;j++){
putchar((vis[x][j]^vis[x+1][j])?'-':'.');
putchar('+');
}
puts("");
}
}
for(int i=1;i<=2*m-1;i++) putchar('+');
puts("G+");
return 0;
}