#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> ii;
typedef vector<ll> vi;
typedef vector<ii> vii;
typedef vector<vi> vvi;

#define x first
#define y second
#define pb push_back
#define eb emplace_back
#define rep(i,a,b) for(auto i = (a); i < (b); ++i)
#define REP(i,n) rep(i,0,n)
#define sz(v) ((int) (v).size())
#define rs resize
#define all(v) begin(v), end(v)

vector<vector<bool>> park;
ll k;
ll maakLaag(ll maxh, ll i){
    //Blijf toevoegen
    ll h;
    for(h = 0; i * h * (h - 1) / 2 <= k && h <= maxh; h++);
    h--;

    //Pas het toe
    k -= i * h * (h - 1) / 2;
    for(ll j = 0; j < h; j++)
        park[i][j] = true;
    return h;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout << fixed << setprecision(20);
    cin >> k;
    park = vector<vector<bool>>(2025, vector<bool>(2025,false));
    ll nv;
    for(nv = 0; nv * nv * (nv - 1) * (nv - 1) <= 4 * k; nv++) ;
    nv--;
    for(ll i = 0; i < nv; i++)
        for(ll j = 0; j < nv; j++)
            park[i][j] = true;
    ll maxh = nv;
    k -= nv * nv * (nv - 1) * (nv - 1) / 4;
    for(ll i = nv; k > i; i++){
        maxh = maakLaag(maxh, i);
    }

    //Zet onderaan een grote laag
    ll nl;
    for(nl = 0; nl * (nl - 1) / 2 <= k; nl++) ;
    nl--;
    k -= (nl * (nl - 1)) / 2;
    for(ll i = 0; i < nl; i++)
        for(ll j = 2023; j < 2025; j++)
            park[i][j] = true;

    //Zet kleine vierkantjes
    for(ll i = 2023; k > 0; i -= 5) {
        k--;
        park[i][2023] = true;
        park[i + 1][2023] = true;
        park[i][2024] = true;
        park[i + 1][2024] = true;
    }

    //Print het
    cout << 2025 << " " << 2025 << endl;
    for(ll i = 0; i < 2025; i++)
    {
        for(ll j = 0; j < 2025; j++) {
            if (park[i][j])
                cout << "#";
            else
                cout << ".";
        }
        cout << endl;
    }
    return 0;
}