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;
const int MOD = 1000000007;
const long long int LLINF = 1ll << 60;
const char en = '\n';
void yes() {
  cout << "Yes" << en;
  exit(0);
}
void no() {
  cout << "No" << en;
  exit(0);
}
long long int sti(string a) {
  long long int k = 0;
  for (int i = 0; i < a.size(); ++i) {
    k *= 10;
    k += a[i] - '0';
  }
  return k;
}
string its(long long int k) {
  if (k == 0) return "0";
  string a;
  while (k) {
    a.push_back((k % 10) + '0');
    k /= 10;
  }
  reverse(a.begin(), a.end());
  return a;
}
int gcd(int a, int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
template <class T, class K>
pair<T, K> mp(T a, K b) {
  return make_pair(a, b);
}
long long int mult(long long int a, long long int b) { return (a * b) % MOD; }
long long int pot(long long int n, long long int k) {
  if (k == 0) return 1;
  long long int a = pot(n, k / 2);
  a = mult(a, a);
  if (k % 2)
    return mult(a, n);
  else
    return a;
}
long long int divide(long long int a, long long int b) {
  return mult(a, pot(b, MOD - 2));
}
long long int sub(long long int a, long long int b) {
  return (a - b + MOD) % MOD;
}
long long int add(long long int a, long long int b) { return (a + b) % MOD; }
bool prime(long long int a) {
  if (a == 1) return 0;
  for (int i = 2; i <= round(sqrt(a)); ++i) {
    if (a % i == 0) return 0;
  }
  return 1;
}
string h;
int val = 0;
const int si = 270;
int main() {
  ios_base::sync_with_stdio(false);
  cin >> h;
  for (int o = 0; o < h.size(); ++o) {
    char k = h[o];
    int as = int(k) - val;
    for (int i = 0; i < si; ++i) cout << '.';
    cout << en;
    cout << "...";
    for (int i = 0; i < as; ++i) cout << 'X';
    for (int i = 3 + as; i < si; ++i) cout << '.';
    cout << en << "X.X";
    for (int i = 0; i < as; ++i) cout << 'X';
    cout << "X.";
    for (int i = as + 5; i < si; ++i) cout << 'X';
    cout << en;
    for (int i = 0; i < si; ++i) cout << '.';
    cout << en << 'X';
    for (int i = 1; i < si - 1; ++i) cout << '.';
    cout << 'X' << en << 'X';
    for (int i = 1; i < si; ++i) cout << '.';
    cout << en;
    for (int i = 0; i < si; ++i) cout << '.';
    cout << en;
    for (int i = 0; i < as; ++i) cout << "X.";
    for (int i = as * 2; i < si; ++i) cout << '.';
    cout << en;
  }
}