#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
// #include <boost/multiprecision/cpp_int.hpp> 

#define gc getchar//_unlocked
#define pc putchar//_unlocked
#define ll long long
#define ld long double
#define pb push_back
#define mp make_pair
#define pp pair<int,int>
#define ppl pair<ll,ll>
#define bigint boost::multiprecision::cpp_int
#define finp ios_base::sync_with_stdio(0);cin.tie(0);
#define bc __builtin_popcountll
#define afor(i,a,b) for(int i=a;i<=b;++i)
#define bfor(i,a,b) for(int i=a;i>=b;--i)
#define vi vector<int>
#define vpp vector<pp>
#define vll vector<ll>

using namespace std;
using namespace __gnu_pbds;

char putnb[20];
void putn(ll n) {if(!n)pc('0');if(n<0)pc('-'),n=0-n;int pi=0;while(n)putnb[pi++]=(n%10)+'0',n/=10;while(pi)pc(putnb[--pi]);}
void sci(int *x) {register char c = gc();*x = 0;for(; (c<48)||(c>57);c = gc());for(; (c>47)&&(c<58);c = gc())*x = (int)((((*x)<<1) + ((*x)<<3)) + c - 48);}
void scll(ll *x)  {register char c = gc();*x = 0;for(; (c<48)||(c>57);c = gc());for(; (c>47)&&(c<58);c = gc())*x =  (ll)((((*x)<<1) + ((*x)<<3)) + c - 48);}
ll fp(ll a,ll b,ll c) {if(b==0)return 1%c; if(b==1)return a%c; ll ret=fp(a,b/2,c); ret=(ret*ret)%c; if(b&1)ret=(ret*a)%c; return ret;}

const ll mod=1e9 +7;
const ll mod2=1999999973;
const ll inf=1e18;
const int infs=1e9 + 1000;
const int N=100000;
const long double PI = acos(-1);

template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

int a,b;
int n = 100;
int m = 99;

char W,B;
char mat[105][105];
int main()
{
  finp;
  cin>>a>>b;
  char ww = '.';
  char bb = '#';
  if(a <= b)W=ww,B=bb;
  else 
  {
    swap(a,b);
    W=bb,B=ww;
  }

  int lx,ly;

  afor(i,1,n)afor(j,1,m)mat[i][j] = W;

  int wcnt = 0;
  int bcnt = 0;
  int cr = 0;
  afor(i,1,n)
  {
    afor(j,1,m)
    {
    if(!cr)mat[i][j] = W,wcnt++;
    else mat[i][j] = B,bcnt++;

    cr^= 1;

      if(wcnt == a)
      {
        lx = i;
        ly = j;
        break;
      }
    }
    if(wcnt == a)break;
  }


  int srow;//good row to start putting Bs in


  if(ly == 1)
  {
    /*
    BWBWBWBWBW...
    WBBBBBBBBB...
    WWWWWWWWWW...
    */
    afor(j,2,m)mat[lx][j] = B;
    
    bcnt-= (m + 1)/2 - 2;
    if(lx == 1)bcnt = 1;
    srow = lx+2;
  }
  else if(ly & 1)
  {
    /*
    BWBWBWBW..
    WBWBWBBBBB
    WBBBBBBBBB
    WWWWWWWWWW
    */

    afor(j,ly+1,m)mat[lx][j] = B;
    mat[lx+1][1] = W;
    afor(j,2,m)mat[lx+1][j] = B;

    if(ly<m)bcnt-= ly/2 + (m + 1)/2 - (ly+1)/2 - 1;
    else bcnt-= ly/2 - 1; 

    if(lx == 1)bcnt = 1;
    srow = lx+3;
  }
  else 
  {
    /*
    WBWBWB....
    BWBWBBBBBB
    BWBBBBBBBB
    WWWWWWWWWW
    */
    afor(j,ly+1,m)mat[lx][j] = B;
    afor(j,1,m)mat[lx+1][j] = B;
    mat[lx+1][2] = W;


    if(ly+1 == m)bcnt-= m/2 - 2;
    else bcnt-= ly/2 - 1 + m/2 - ly/2 - 1;

    if(lx == 1)bcnt = 2;
    srow = lx + 3;
  }

  
  cr = 0;

  for(int i=srow;i<=n;i+=2)
  { 
    afor(j,1,m)
    {
    if(bcnt == b)break;
    if(j & 1)mat[i][j] = B,++bcnt;
    if(bcnt == b)break;
    }
    if(bcnt == b)break;
  }



  cout<<n<<" "<<m<<"\n";

  afor(i,1,n)afor(j,1,m)
  {
    cout<<mat[i][j];
    if(j==m)cout<<"\n";
  }
  
return 0;
}

Measured memory_bytes: 256