Problem: 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.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
string makeCentered(int len) {
  string output;
  for (int i = 0; i < 27; i++) {
    output.push_back('.');
  }
  for (int i = 0; i < len; i++) {
    output[13 + i] = 'X';
    output[13 - i] = 'X';
  }
  return output;
}
string blank() {
  string output;
  for (int i = 0; i < 27; i++) {
    output.push_back('.');
  }
  return output;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  string input;
  cin >> input;
  vector<int> target;
  for (int i = 0; i < input.size(); i++) {
    target.push_back(int(input[i]));
  }
  vector<string> output;
  int val = 0;
  for (int i = 0; i < target.size(); i++) {
    int curTarget = target[i];
    vector<int> triSizes;
    int distance = curTarget - val;
    if (i != 0) distance = val - curTarget;
    while (distance < 0) distance += 256;
    while (distance > 0) {
      if (i == 0) {
        for (int j = 12; j >= (i == 0 ? 1 : 2); j--) {
          int next;
          if (i != 0)
            next = j * j - 1;
          else
            next = j * j;
          if (next <= distance) {
            for (int k = 1; k <= j + 1; k++) {
              cout << makeCentered(k) << endl;
            }
            distance -= next;
            val += next;
            val %= 256;
            cout << blank() << endl;
            break;
          }
        }
      } else {
        cout << makeCentered(1) << endl;
        cout << blank() << endl;
        distance -= 1;
        val -= 1;
        if (val < 0) val += 256;
      }
    }
    cout << blank() << endl;
    string curString = blank();
    curString[0] = 'X';
    curString[curString.size() - 1] = 'X';
    cout << curString << endl;
    curString[curString.size() - 1] = '.';
    cout << curString << endl;
    cout << blank() << endl;
  }
  return 0;
}