#include<bits/stdc++.h>

#define f first
#define s second
#define all(x) (x).begin(),(x).end()
#define ll long long
#define pb push_back
#define sz(x) (int)(x).size()

using namespace std;

int main(){
    ll k;
    cin >> k;
    const int N=2025;
    vector<int> dep(N);
    dep[0]=N;
    for(int i=1;i<N;i++)dep[i]=1;
    for(int i=1;i<N-3;i++){
        ll sl=i;
        for(;dep[i]<dep[i-1];){
            if(k>=sl){
                k-=sl;
                dep[i]++;
                sl+=i;
            }
            else{
                break;
            }
        }
        if(dep[i]==1){
            break;
        }
    }
    vector<string> mat(N);
    string my(N,'.');
    for(int i=0;i<N;i++){
        mat[i]=my;
        if(i<N-3)
            for(int j=0;j<dep[i];j++){
                mat[i][j]='#';
            }
    }
    int j=0;
    for(int o=N-3;o>=2;o--){
        ll my=(ll)o*(o-1)/2;
        while(my<=k){
            k-=my;
            for(int l=0;l<o;l++){
                mat[N-1][j]=mat[N-2][j]='#';
                j++;
            }
            j++;
        }
    }
    assert(k==0);
    printf("%i %i\n",N,N);
    for(int i=0;i<N;i++){
        cout << mat[i] << endl;
    }
    return 0;
    vector<pair<ll,pair<int,int>>> ord;
    ll lim=4e12;
    for(int n=2;n<=2001;n++){
        for(int m=2;m<=2001;m++){
            ll num=(ll)n*(n-1)/2*(ll)m*(m-1)/2;
            if(num<=lim)
            ord.pb({num,{n,m}});
        }
    }
    sort(all(ord));
    ll mx=0;
    for(int i=1;i<sz(ord);i++){
        ll my=ord[i].f-ord[i-1].f;
        if(my>mx){
            printf("%lld nasao!\n",my);
            mx=my;
        }
    }
    printf("Last is %lld\n",ord.back().f);
}