In this problem you will write a simple code generator for a 2D programming language derived from [Brainfuck](https://en.wikipedia.org/wiki/Brainfuck).

The code in this language is a rectangular grid of characters '.' and 'X'. The code is converted to a Brainfuck program as follows: the characters are read in the usual order (top to bottom, left to right), and each 'X' character is converted a Brainfuck instruction to be executed. The instruction is defined by the left, top and right neighbors of the 'X' character using the following conversion table:

<image>

You are given a string. Output a program in the described language which prints this string.

You can download the language interpreter used for judging here: <https://assets.codeforces.com/rounds/952/puzzling-interpreter.cpp> (use C++11 to compile the code). Note several implementation details:

  * The first step of the language interpretation is conversion to a Brainfuck program, which is then executed.
  * The code must be rectangular, with all lines of the same length. It can have at most 10,000 lines and 10,000 columns, and can have at most 500,000 'X' characters.
  * The code has toroidal topology, i.e. the 'X' on the first line will have top neighbor in the last line.
  * Brainfuck interpreter has 30000 memory cells which store integers from 0 to 255 with increment/decrement done modulo 256.
  * Console input (, command) is allowed in Brainfuck code but has no effect when executed.

Input

The input consists of a single string of characters with ASCII codes between 33 ('!') and 122 ('z'), inclusive. The length of the string is between 1 and 10 characters, inclusive.

Output

Output a program in the described language which, when executed, will print the given message.

Example

Input

$$$

Output

.......X.......
......XXX......
.....XXXXX.....
....XXXXXXX....
...XXXXXXXXX...
..XXXXXXXXXXX..
.XXXXXXXXXXXXX.
...............
X.............X
X..............
X..............
X..............

Note

The example corresponds to the following Brainfuck program:
    
    
           -  
          >+<  
         >+++<  
        >+++++<  
       >+++++++<  
      >+++++++++<  
     >+++++++++++<  
      
    <             >  
    .  
    .  
    .  
    

The triangular block decrements the first memory cell and sets the value of the second memory cell to 36 - the ASCII code of '$' character. The next line after the triangular block moves the memory pointer to the second memory cell, and the next three lines print the '$' character three times.
#include <bits/stdc++.h>
using namespace std;
int main() {
  vector<int> sqrs = {4,  9,   16,  25,  36,  49,  64,
                      81, 100, 121, 144, 169, 196, 225};
  vector<int> tq;
  vector<string> strs;
  string s, t;
  cin >> s;
  int kur, prv = 1;
  for (int i = 0; i < s.size(); i++) {
    kur = (int(s[i]) + 256 - prv) % 256;
    prv = s[i];
    if (kur > 0) {
      kur++;
    } else {
      strs.push_back("p");
    }
    tq.clear();
    for (int j = sqrs.size() - 1; j >= 0; j--) {
      while (kur >= sqrs[j]) {
        tq.push_back(sqrs[j]);
        kur -= sqrs[j];
        if (kur > 0) {
          kur++;
        }
      }
    }
    if (kur) {
      for (int k = kur; k < 4; k++) {
        tq.push_back(0);
      }
      tq.push_back(4);
    }
    for (int j = 0; j < tq.size(); j++) {
      kur = 0;
      for (int k = 1; kur <= tq[j]; k += 2) {
        kur += k;
        t = "";
        for (int q = 0; q < k; q++) {
          t += "X";
        }
        strs.push_back(t);
      }
      strs.push_back("p");
    }
    strs.push_back("r");
  }
  kur = 0;
  for (int i = 0; i < strs.size(); i++) {
    kur = max(kur, int(strs[i].size()));
  }
  string fuller = "";
  for (int i = 0; i < kur; i++) {
    fuller += ".";
  }
  for (int i = 0; i < strs.size(); i++) {
    if (strs[i] == "p") {
      cout << "." << fuller << "." << endl;
    } else if (strs[i] == "r") {
      cout << "X" << fuller << "X" << endl
           << "X" << fuller << "." << endl
           << "." << fuller << "." << endl;
    } else {
      cout << strs[i].substr(1 + (int(strs[i].size()) >> 1));
      for (int j = 0; j < (kur + 2 - strs[i].size()); j++) {
        cout << ".";
      }
      cout << strs[i].substr(0, 1 + (int(strs[i].size()) >> 1));
      cout << endl;
    }
  }
  return 0;
}
