#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <algorithm>
#include <functional>
#include <utility>
#include <bitset>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstdio>

using namespace std;

#define REP(i,n) for((i)=0;(i)<(int)(n);(i)++)
#define snuke(c,itr) for(__typeof((c).begin()) itr=(c).begin();itr!=(c).end();itr++)

int X,Y;
int a[110][110];
int dx[] = {1,-1,0,0,0}, dy[] = {0,0,1,-1,0}, dz[] = {1,1,1,1,2};
string ds = "||--+";

bool empty(int x, int y){
	return (x >= 0 && x < X && y >= 0 && y < Y && a[x][y] == 0);
}

bool can_put(int x, int y){
	int i;
	REP(i,5) if(!empty(x + dx[i], y + dy[i])) return false;
	return true;
}

void put(int x, int y){
	int i;
	REP(i,5) a[x+dx[i]][y+dy[i]] += dz[i];
}

void remove(int x, int y){
	int i;
	REP(i,5) a[x+dx[i]][y+dy[i]] = 0;
}

bool movable(int x, int y){
	int i;
	bool ans = false;
	remove(x, y);
	REP(i,4) if(can_put(x + dx[i], y + dy[i])) ans = true;
	put(x, y);
	return ans;
}

void main2(void){
	int i,j,k;
	
	REP(i,X) REP(j,Y) a[i][j] = 0;
	
	vector <pair <int, int> > p;
	REP(i,X) REP(j,Y) p.push_back(make_pair(i, j));
	random_shuffle(p.begin(),p.end());
	REP(i,p.size()) if(can_put(p[i].first, p[i].second)) put(p[i].first, p[i].second);
	
	int counter = 0;
	
	while(counter < 300000){
		counter++;
		int x = rand() % X;
		int y = rand() % Y;
		
		if(a[x][y] == 2 && movable(x, y)){
			counter = 0;
			for(i=x-2;i<=x+2;i++) for(j=y-2;j<=y+2;j++) if(i >= 0 && i < X && j >= 0 && j < Y && a[i][j] == 2) remove(i, j);
			vector <pair <int, int> > p;
			for(i=x-4;i<=x+4;i++) for(j=y-4;j<=y+4;j++) p.push_back(make_pair(i, j));
			random_shuffle(p.begin(),p.end());
			REP(i,p.size()) if(can_put(p[i].first, p[i].second)) put(p[i].first, p[i].second);
		}
	}
}

int main(void){
	int i,j,k;
	
	cin >> X >> Y;
	main2();
	
	vector <string> board(X);
	REP(i,X) REP(j,Y) board[i] += '.';
	
	REP(i,X) REP(j,Y) if(a[i][j] == 2) REP(k,5) board[i+dx[k]][j+dy[k]] = ds[k];
	
	REP(i,X) printf("%s\n", board[i].c_str());
	
	return 0;
}
