#include <bits/stdc++.h>
using namespace std;

const long long maxk = 4e12;
int maxn = 2025;
long long get(long long n) { return n * (n - 1) / 2; }

bool a[2050][2050];

void solve(long long k, int sx, int sy) {
    if(k == 0) {
        for(int i = sx; i < maxn; i++) {
            for(int j = sy; j < maxn; j++) {
                a[i][j] = true;
            }
        }
        return;
    }
    if (sx>=maxn || sy>=maxn) {
        return;
    }
    assert(sx < maxn);
    assert(sy < maxn);
    int lenx = maxn - sx, leny = maxn - sy;
//    if(lenx > leny) {
//        swap(lenx, leny);
//        swap(sx, sy);
//        for(int i = 0; i < maxn; i++){
//            for(int j = i + 1; j < maxn; j++){
//                swap(a[i][j], a[j][i]);
//            }
//        }
//    }
    if(lenx > leny){
        int j = 1;
        while(get(lenx) * get(j) <= k && j < leny) ++j;
        if(get(lenx) * get(j) > k) --j;

        if(j == 1){ // rossz eset
            int g = 1;
            while(get(g) <= k) ++g;
            --g;


            for(int i = sx + g; i < maxn; i++) a[i][sy] = a[i][sy+1] = true;
            for(int i = sx; i < maxn; i++) a[i][sy+2] = true;

//            for(int i = sx; i < maxn; i++) a[i][sy] = true;
            solve(k - get(g), sx, sy + 3);

            return;
        }

        if(j < leny){
            for(int i = sx; i < maxn; i++) a[i][sy + j] = true;
        }

        solve(k - get(lenx) * get(j), sx, sy + j + 1);

    } else {
        int j = 1;
        while(get(leny) * get(j) <= k && j < lenx) ++j;
        if(get(leny) * get(j) > k) --j;

        //cout << "proba " << lenx << " " << leny << "\n";

        if(j == 1){ // rossz eset
            int g = 1;
            while(get(g) <= k) ++g;
            --g;

            //cout << "fontos " << g << " " << get(g) << "\n";


            for(int i = sy + g; i < maxn; i++) a[sx][i] = a[sx+1][i] = true;
            for(int i = sy; i < maxn; i++) a[sx+2][i] = true;

//            for(int i = sy; i < maxn; i++) a[sx][i] = true;
            solve(k - get(g), sx + 3, sy);


            return;
        }

        if(j < lenx){
            for(int i = sy; i < maxn; i++) a[sx + j][i] = true;
        }

        solve(k - get(leny) * get(j), sx + j + 1, sy);
    }
}

bool test=0;
long long vel() {
    long long maxval=4'000'000'000'000;
    maxval=100;
    long long a=rand(), b=rand(), c=rand(), d=rand(), e=rand();
    long long prod=abs(a*b*c*d%maxval)+1;
    return prod;
}


int main(){
    ios_base::sync_with_stdio(false);
    srand(time(0));
    cin.tie(0);
    long long k;
    if (!test) cin>>k;
    else {
        k=vel();
        //cout << k << "\n";
        //exit(0);
    }
    //k=4000000000000;
    /*maxn=10;
    k=81;*/
    //maxn=10;
    solve(k, 0, 0);

    cout << maxn << ' ' << maxn << '\n';
    for(int i = 0; i < maxn; i++){
        for(int j = 0; j < maxn; j++){
            cout << (a[i][j] ? '.' : '#');
        }
        cout << '\n';
    }

    //cout << "sikerult\n";

    return 0;
}