#include <iostream>
#include <cassert>

using namespace std;
const int sz=2025;
long long mat[sz+100][sz+100];
long long k,topline;
void add()
{
    long long i,j;
    long long top=topline;
    for(i=1; i<=sz; i++)
    {
        mat[top][i]=1;
    }
    for(i=top+1; i<=sz; i++)
    {
        for(j=1; j<=sz; j++)
        {
            if((j-1)*(i-top)<=k)
            {
                k-=(j-1)*(i-top);
                mat[i][j]=1;
            }
            else
            {
                topline=i+2;
                return;
            }
        }
    }
}
void add2()
{
    long long i,j;
    long long top=topline;
    for(i=1; i<=sz; i++)
    {
        mat[top][i]=1;
    }
    int poz=1;
    int leng;
    while(k)
    {
        for(leng=1; poz+leng<=sz; leng++)
        {
            if(leng*(leng-1)/2>k)
            {
                break;
            }
        }
        leng--;
        k-=(leng-1)*(leng)/2;
        for(j=poz; j<=poz+leng-1; j++)
        {
            mat[top+1][j]=1;
        }
        poz=poz+leng+1;
        topline+=3;
        if(poz>=sz-2)
        {
            break;
        }
    }
}
signed main()
{
    long long n,i,j;
    cin>>k;
    cout<<sz<<" "<<sz<<'\n';
    topline=1;
    add();
    add();
    while(k!=0)
    {
        add2();
    }
    assert(topline <= 2027);
    for(i=1; i<=sz; i++)
    {
        for(j=1; j<=sz; j++)
        {
            if(mat[i][j]==1)
            {
                cout<<"#";
            }
            else
            {
                cout<<".";
            }
            //cout<<mat[i][j];
        }
        cout<<endl;
    }
    return 0;
}