#include <bits/stdc++.h>

#define X first
#define Y second
#define PB push_back
#define x first
#define y second
#define pb push_back

using namespace std;

typedef long long ll;
typedef vector<int> vi;

const int N=300010,MOD=1e9+7;
const char en='\n';
const ll LLINF=1ll<<60;

vector<string> trp(vector<string> a)
{
	int n=a.size(),m=a[0].size();
	vector<string> b(m,string(n,'.'));
	for (int i=0;i<n;++i) for (int j=0;j<m;++j) b[j][i]=a[i][j];
	return b;
}

vector<string> solve(ll k,ll n,ll m)
{
	//clog<<k<<' '<<n<<' '<<m<<endl;
	assert(n>1 && m>1);
	if (k==0) return vector<string>(n,string(m,'.'));
	if (n<m) return trp(solve(k,m,n));
	ll u=k/(m*(m-1)/2);
	ll kol=1;
	while ((kol+1)*kol/2<=u) ++kol;
	ll os=k-(kol*(kol-1)/2)*(m*(m-1)/2);
	ll a=1;
	while (a*(a+1)/2*kol<=os) ++a;
	assert(n+1>kol);
	vector<string> v=solve(os-a*(a-1)/2*kol,n-kol-2,m);
	v.pb(string(m,'.'));
	v.pb(string(a,'#')+string(m-a,'.'));
	for (int i=0;i<kol;++i) v.pb(string(m,'#'));
	return v;
	/*
	if (k>=n*(n-1)/2)
	{
		ll u=k/(n*(n-1)/2);
		ll kol=2;
		while ((kol+1)*kol/2<=u) ++kol;
		assert(m>kol);
		vector<string> v=solve(k-(kol*(kol-1)/2)*(n*(n-1)/2),n,m-kol-1);
		for (int i=0;i<n;++i)
		{
			v[i].pb('.');
			for (int j=0;j<kol;++j) v[i].pb('#');
		}
		return v;
	}
	
	vector<string> v=solve(k,n-1,m-1);
	for (int i=0;i<n-1;++i) v[i].pb('.');
	v.pb(string(m,'.'));
	return v;*/
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	ll k;
	cin>>k;
	int n=2025,m=2025;
	vector<string> odg=solve(k,n,m);
	cout<<n<<' '<<m<<endl;
	for (auto x: odg) cout<<x<<en;
}