//#pragma GCC optimize("O3") #include using namespace std; #define ll long long #define rep(i,n) for (ll i=0;i<(ll)n;i++) #define rrep(i,n) for (ll i=(n)-1;i>=(ll)0;i--) #define loop(i,m,n) for(ll i=m;i<=(ll)n;i++) #define rloop(i,m,n) for(ll i=m;i>=(ll)n;i--) #define vl vector #define vvl vector #define vvvl vector #define vdbg(a) rep(ii,a.size()){cout< //#define bbi boost::multiprecision::cpp_int //#include //整数同士の累乗の計算をする。 ll power(ll A, ll B) { ll result = 1; for (ll i=0;i 0){ if ((k&1) ==1)ans=(ans*n)%mod; n=n*n%mod; k >>= 1; } return ans; } //受け取った2次元文字の外側に、文字pをコーティングする。 vector pad(vector &s,char p){ ll h=s.size(); ll w=s[0].size(); vector res(h+2,string(w+2,p)); rep(i,h)rep(j,w)res[i+1][j+1]=s[i][j]; return res; } // Union-Find struct UnionFind { vector par, siz; UnionFind(int n) : par(n, -1) , siz(n, 1) { } // 根を求める int root(int x) { if (par[x] == -1) return x; else return par[x] = root(par[x]); } // x と y が同じグループに属するかどうか (根が一致するかどうか) bool issame(int x, int y) { return root(x) == root(y); } // x を含むグループと y を含むグループとを併合する bool unite(int x, int y) { x = root(x), y = root(y); if (x == y) return false; if (siz[x] < siz[y]) swap(x, y); par[y] = x; siz[x] += siz[y]; return true; } // x を含むグループのサイズ int size(int x) { return siz[root(x)]; } }; //17時55分頃考察に成功 //メイン int main(){ ll mxs=1004; ll n=1024; vector ans(n,string(n,'#')); //L字を削る rep(i,n){ ans[i][0]='.'; ans[n-1][i]='.'; } rep(i,mxs/2){ //四角を削る ans[n-(i*2)-1][i*2]='.'; ans[n-(i*2)-1][i*2+1]='.'; ans[n-(i*2+1)-1][i*2]='.'; ans[n-(i*2+1)-1][i*2+1]='.'; //2マスの奴を生やす loop(j,1,i){ //横 ans[n-(i*2+1)-1-j][i*2-j]='.'; ans[n-(i*2+1)-1-j][i*2+1-j]='.'; //縦 ans[n-(i*2)-1+j][i*2+1+j]='.'; ans[n-(i*2+1)-1+j][i*2+1+j]='.'; } //最後届かせる rep(j,i){ //横 ans[n-(i*2+1)-1-i][j]='.'; //縦 ans[n-j-1][i*2+1+i]='.'; } } //逆向き //L字を削る rep(i,n){ ans[1][i]='.'; ans[i][n-1]='.'; } rep(i,mxs/2){ //四角を削る ans[i*2+1][n-(i*2)-1]='.'; ans[i*2+2][n-(i*2)-1]='.'; ans[i*2+1][n-(i*2+1)-1]='.'; ans[i*2+2][n-(i*2+1)-1]='.'; //2マスの奴を生やす loop(j,1,i){ //横 ans[i*2-j+1][n-(i*2+1)-1-j]='.'; ans[i*2+1-j+1][n-(i*2+1)-1-j]='.'; //縦 ans[i*2+1+j+1][n-(i*2)-1+j]='.'; ans[i*2+1+j+1][n-(i*2+1)-1+j]='.'; } //最後届かせる rep(j,i){ //横 ans[j+1][n-(i*2+1)-1-i]='.'; //縦 ans[i*2+1+i+1][n-j-1]='.'; } } string s; cin>>s; loop(i,1,s.size()){ if(s[i-1]=='o')continue; if(i%2==1){ ans[n-(i/2)-1][i/2]='#'; }else{ ans[i/2][n-(i/2)]='#'; } } cout<