ソースコード
#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define YES() printf("YES\n")
#define NO() printf("NO\n")
#define Yes() printf("Yes\n")
#define No() printf("No\n")
#define in(x,y,h,w) x >= 0 && x < h && y >= 0 && y < w
#define int long long
//typedef long long ll;
typedef vector<bool> vb;
typedef vector<int> vi;
typedef vector<vb> vvb;
typedef vector<vi> vvi;
typedef pair<int,int> P;
template <typename T> T &chmin(T &a, const T &b) { return a = min(a, b); }
template <typename T> T &chmax(T &a, const T &b) { return a = max(a, b); }
const int INF=1e+18;
const double EPS=1e-9;
const int MOD=1000000007;
const int dx[]={1,0,-1,0},dy[]={0,-1,0,1};
signed main(){
int n,h = 65,w = 65;
char field[65][65];
cin >> n;
if(n == 0){
printf("2 2\n.#\n#.\n");
return 0;
}
if(n == 1){
printf("1 1\n.\n");
return 0;
}
for(int i = 0;i < h;i++){
for(int j = 0;j < w;j++) field[i][j] = '#';
}
int x = 0,y = 0,keta = 0;
int nn = n;
while(nn){
keta++;
nn /= 2ll;
}
keta--;
n -= (1ll << keta);
while(x != h - 1 || y != w - 1){
if(keta >= 0){
if((n >> keta) & 1){
field[x][y] = '1';
n -= (1ll << keta);
}
else{
if(keta) field[x][y] = '2';
else field[x][y] = '.';
keta--;
}
}else field[x][y] = '.';
if(x == h - 1) y++;
else x++;
}
field[h - 1][w - 1] = '.';
cout << h << " " << w << endl;
for(int i = 0;i < h;i++){
for(int j = 0;j < w;j++) cout << field[i][j];
cout << endl;
}
return 0;
}