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;
long long fastpow(int a, int b, int MOD) {
  long long x = 1, y = a;
  while (b > 0) {
    if (b % 2 == 1) {
      x = (x * y) % MOD;
    }
    y = (y * y) % MOD;
    b /= 2;
  }
  return x;
}
long long InverseEuler(int n, int MOD) { return fastpow(n, MOD - 2, MOD); }
long long f[300000];
bool init;
long long C(int n, int r, int MOD) {
  if (!init) {
    init = 1;
    f[0] = 1;
    for (int i = 1; i < 300000; i++) f[i] = (f[i - 1] * i) % MOD;
  }
  return (f[n] *
          ((InverseEuler(f[r], MOD) * InverseEuler(f[n - r], MOD)) % MOD)) %
         MOD;
}
string trim(const string& str) {
  size_t first = str.find_first_not_of(' ');
  if (string::npos == first) {
    return str;
  }
  size_t last = str.find_last_not_of(' ');
  return str.substr(first, (last - first + 1));
}
vector<int> a, b;
void cek() {
  int Z = a.size();
  for (int i = 1; i < Z; i++) {
    if (abs(a[i - 1] - a[i]) >= 2) {
      cout << "NO" << endl;
      exit(0);
    }
  }
}
int pos = 0;
int L = 100;
bool ans[1111][1111];
int main() {
  std::ios::sync_with_stdio(false);
  string S;
  cin >> S;
  int now = 0;
  for (int a : S) {
    cout << ".." << endl;
    cout << "XX" << endl;
    while (now != a) {
      cout << "XX" << endl;
      now = (now + 2) % 256;
      if (a == (now - 1 + 256) % 256) {
        cout << ".." << endl;
        cout << "X." << endl;
        now = a;
      }
    }
    cout << "X." << endl;
  }
}
