作为一名大自然的搬运工,我搬来了 java 的 AC 代码和某不官方的思路
- 首先,读取字体数据,并准备以 $3$ 度为步长从 $-15$ 度旋转到 $15$ 度的数据。
- 噪点通过中值滤波器消除,无法消除的噪声通过移除较小的连接组件消除。
- 对于每个连通块,将其与字体数据进行比较,然后选择匹配率最高的字符。同时,将字体数据调整到匹配输入字符的大小,然后进行比较。
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Random;
public class Main {
static InputStream is;
static PrintWriter out;
static String INPUT = "";
static long[][][] BURIED;
static int REP = 50;
static void solve() throws Exception
{
Random gen = new Random(1);
int T = ni();
double ROT;
double SKEW;
if(T < 30){
ROT = 2;
SKEW = 0;
REP = 70;
}else if(T < 90){
ROT = 10;
SKEW = 0.1;
REP = 70;
}else{
ROT = 15;
SKEW = 0.1;
REP = 70;
}
BURIED = new long[16][REP][65];
for(int i = 0;i < 16;i++){
long[] BASE = new long[65];
for(int j = 0;j < BURY[i].length;j++){
for(int k = 0;k < BURY[i][j].length();k++){
if(BURY[i][j].charAt(k) == '#'){
BASE[j] |= 1L<<k;
}
}
}
for(int rep = 0;rep < REP;rep++){
long[] TO = new long[65];
// double scale = gen.nextDouble()*0.2+0.8;
// double wscale = (gen.nextDouble()*0.1+0.9)*scale;
// double hscale = (gen.nextDouble()*0.1+0.9)*scale;
double scale = gen.nextDouble()*0.1+0.9;
double wscale = (gen.nextDouble()*0.1+0.9)*scale;
double hscale = (gen.nextDouble()*0.1+0.9)*scale;
// double slidex = gen.nextDouble()*10-5;
double rot = (gen.nextDouble()*ROT*2-ROT)/180*Math.PI;
double skewx = gen.nextDouble()*SKEW*2-SKEW;
double skewy = gen.nextDouble()*SKEW*2-SKEW;
double crot = Math.cos(rot);
double srot = Math.sin(rot);
for(int j = 0;j < 65;j++){
for(int k = 0;k < 38;k++){
if(BASE[j]<<63-k<0){
double y = j+0.5-32.5, x = k+0.5-19;
x *= wscale; y *= hscale;
double nx = x * crot - y * srot;
double ny = x * srot + y * crot;
x = nx; y = ny;
nx = x + skewy * y;
ny = y + skewx * x;
x = nx; y = ny;
int nj = (int)Math.round(y+32.5-0.5);
int nk = (int)Math.round(x+19-0.5);
if(nk >= 0 && nk < 38 && nj >= 0 && nj < 65){
TO[nj] |= 1L<<nk;
}
}
}
}
reduceNoise(TO);
balanceW(TO);
balanceH(TO);
BURIED[i][rep] = TO;
}
}
int m = ni(), n = ni();
char[][] map = nm(n, m);
reduceNoise(map);
// for(char[] x : map){
// tr(new String(x));
// }
int[] f = new int[m];
for(int i = 0;i < m;i++){
for(int j = 0;j < n;j++){
f[i] += map[j][i] == '#' ? 1 : 0;
}
}
int[][] inters = new int[m][];
int p = 0;
for(int i = 0;i < m;i++){
if(f[i] <= 1){
int j;
for(j = i+1;j < m && f[j] <= 1;j++);
if(i > 0 && j < m){
inters[p++] = new int[]{i, j};
}
i = j-1;
}
}
StringBuilder sb = new StringBuilder();
if(p == 0){
sb.append(recognize(0, m, map));
}else{
char x = recognize(0, inters[0][0]+inters[0][1]>>>1, map);
if(x != 0)sb.append(x);
for(int i = 0;i < p-1;i++){
x = recognize(inters[i][0]+inters[i][1]>>>1, inters[i+1][0]+inters[i+1][1]>>>1, map);
if(x != 0)sb.append(x);
}
x = recognize(inters[p-1][0]+inters[p-1][1]>>>1, m, map);
if(x != 0)sb.append(x);
}
// tr(new String(str));
out.println(new Parser4().eval(sb.toString().toCharArray()));
}
static char[] D = "0123456789()+-*/".toCharArray();
static void balanceW(long[] map)
{
int sumf = 0;
int g = 0;
for(long x : map){
for(int i = 0;i < 38;i++){
if(x<<63-i<0){
g += i;
sumf++;
}
}
}
int center = (2*g+sumf)/(2*sumf);
for(int i = 0;i < 65;i++){
if(center < 19){
map[i]<<=19-center;
}else{
map[i]>>>=center-19;
}
}
}
static void balanceH(long[] map)
{
int sumf = 0;
int g = 0;
for(int i = 0;i < 65;i++){
int f = Long.bitCount(map[i]);
g += i*f;
sumf += f;
}
int center = (2*g+sumf)/(2*sumf);
if(center < 32){
for(int i = 65-1-(32-center);i >= 0;i--){
map[i+32-center] = map[i];
}
for(int i = 32-center-1;i >= 0;i--)map[i] = 0;
}else{
for(int i = center-32;i < 65;i++){
map[i-(center-32)] = map[i];
}
for(int i = 65-(center-32);i < 65;i++)map[i] = 0;
}
}
static char recognize(int l, int r, char[][] map)
{
if(r-l < 10)return 0;
long[] expanded = new long[65];
int offset = (r-l-38)/2+l;
for(int i = 0;i < 65;i++){
for(int j = 0;j < 38;j++){
if(j+offset >= l && j+offset < r && map[i][j+offset] == '#'){
expanded[i] |= 1L<<j;
}
}
}
// for(int i = 0;i < 65;i++){
// for(int j = 0;j < 38;j++){
// double x = (j+0.5)/38.*(r-l)-0.5;
// double vote = 0;
// int fx = (int)Math.floor(x);
// double ww = 0;
// for(int k = fx;k <= fx+1;k++){
// double lw = 1-(x-k)*(x-k);
// ww += lw;
// if(l+k >= 0 && l+k < map[0].length){
// if(map[i][l+k] == '#')vote += lw;
// }
// }
// if(vote >= ww/2){
// expanded[i] |= 1L<<j;
// }
// }
// }
balanceW(expanded);
balanceH(expanded);
int maxi = -1;
int maxmat = -1;
for(int i = 0;i < 16;i++){
for(int u = 0;u < REP;u++){
int mat = 0;
for(int j = 0;j < 65;j++){
mat += 38-Long.bitCount(expanded[j]^BURIED[i][u][j]);
}
// if(i == 0){
// for(long x : BURIED[i][u]){
// tr(Long.toBinaryString(x|1L<<38).substring(1));
// }
// }
if(mat > maxmat){
maxmat = mat;
maxi = i;
}
}
}
// tr(l, r, D[maxi], maxmat, (double)maxmat/38/65);
// if((double)maxmat/38/65 < 0.9){
// for(long x : expanded){
// tr(Long.toBinaryString(x|1L<<38).substring(1));
// }
//// for(long x : BURIED[8][0]){
//// tr(Long.toBinaryString(x|1L<<38).substring(1));
//// }
// }
// System.exit(1);
return D[maxi];
}
static void reduceNoise(char[][] map)
{
int n = map.length, m = map[0].length;
// int[] S = {0, 100, 71, 58, 50, 45, 41, 38, 35};
// int[] S = {0, 100, 50, 33, 25, 20, 17, 14, 13};
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
int b = 0, w = 0;
for(int k = -2;k <= 2;k++){
for(int l = -2;l <= 2;l++){
// if(k == 0 && l == 0)continue;
if(i+k >= 0 && i+k < n && j+l >= 0 && j+l < m){
if(map[i+k][l+j] == '#'){
b+=100/(k*k+l*l+1);
}else{
w+=100/(k*k+l*l+1);
// w+=S[k*k+l*l];
}
}
}
}
// roughly
if(map[i][j] == '#' && w > b){
map[i][j] = '.';
}else if(map[i][j] == '.' && b > w){
map[i][j] = '#';
}
// if(map[i][j] == '#' && w >= 8*b){
// map[i][j] = '.';
// }else if(map[i][j] == '.' && b >= 3*w){
// map[i][j] = '#';
// }
}
}
}
static void reduceNoise(long[] map)
{
// int[] S = {0, 100, 50, 33, 25, 20, 17, 14, 13};
// int[] S = {0, 100, 71, 58, 50, 45, 41, 38, 35};
for(int i = 0;i < 65;i++){
for(int j = 0;j < 38;j++){
int b = 0, w = 0;
for(int k = -2;k <= 2;k++){
for(int l = -2;l <= 2;l++){
if(k == 0 && l == 0)continue;
if(i+k >= 0 && i+k < 65 && j+l >= 0 && j+l < 38){
if(map[i+k]<<63-(l+j)<0){
b+=100/(k*k+l*l+1);
}else{
w+=100/(k*k+l*l+1);
}
}
}
}
// roughly
if(map[i]<<63-j<0 && w > b){
map[i] ^= 1L<<j;
}else if(map[i]<<63-j>=0 && b > w){
map[i] ^= 1L<<j;
}
}
}
}
public static class Parser4 {
// exp = exp2 ([+-] exp2)*
// exp2 = exp3 ([*/] exp3)*
// exp3 = exp4 | '(' exp ')'
// exp4 = -*digit+{[\.]digit+}
// digit = [0-9]
char[] str;
int pos;
int n;
public int eval(char[] str) throws Exception
{
this.str = str;
pos = 0;
n = this.str.length;
int ret = exp();
if(pos < n)throw new AssertionError(-1);
return ret;
}
public int exp() throws Exception
{
int v = exp2();
while(pos < n && (str[pos] == '+' || str[pos] == '-')){
char op = str[pos];
pos++;
if(pos >= n)throw new AssertionError(pos);
int w = exp2();
if(op == '+'){
v += w;
}else{
v -= w;
}
}
return v;
}
public int exp2() throws Exception
{
int v = exp3();
while(pos < n && (str[pos] == '*' || str[pos] == '/')){
char op = str[pos];
pos++;
if(pos >= n)throw new AssertionError(pos);
int w = exp3();
if(op == '*'){
v *= w;
}else{
if(w == 0)throw new AssertionError(pos);
v /= w;
}
}
return v;
}
public int exp3() throws Exception
{
if(pos < n && str[pos] == '('){
pos++;
int v = exp();
if(!(pos < n && str[pos] == ')'))throw new AssertionError(pos);
pos++;
return v;
}else{
return exp4();
}
}
public int exp4() throws Exception
{
boolean minus = false;
while(pos < n && str[pos] == '-'){
minus = !minus;
pos++;
}
boolean present = false;
int v = 0;
while(pos < n && str[pos] >= '0' && str[pos] <= '9'){
v = v * 10 + digit();
present = true;
}
if(!present)throw new AssertionError(pos);
if(minus)v = -v;
return v;
}
public int digit() throws Exception
{
if(pos == n)throw new AssertionError(pos);
return str[pos++] - '0';
}
}
public static void main(String[] args) throws Exception
{
long S = System.currentTimeMillis();
is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
out = new PrintWriter(System.out);
solve();
out.flush();
long G = System.currentTimeMillis();
tr(G-S+"ms");
}
private static boolean eof()
{
if(lenbuf == -1)return true;
int lptr = ptrbuf;
while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false;
try {
is.mark(1000);
while(true){
int b = is.read();
if(b == -1){
is.reset();
return true;
}else if(!isSpaceChar(b)){
is.reset();
return false;
}
}
} catch (IOException e) {
return true;
}
}
private static byte[] inbuf = new byte[1024];
static int lenbuf = 0, ptrbuf = 0;
private static int readByte()
{
if(lenbuf == -1)throw new InputMismatchException();
if(ptrbuf >= lenbuf){
ptrbuf = 0;
try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
if(lenbuf <= 0)return -1;
}
return inbuf[ptrbuf++];
}
private static boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }
// private static boolean isSpaceChar(int c) { return !(c >= 32 && c <= 126); }
private static int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }
private static double nd() { return Double.parseDouble(ns()); }
private static char nc() { return (char)skip(); }
private static String ns()
{
int b = skip();
StringBuilder sb = new StringBuilder();
while(!(isSpaceChar(b))){
sb.appendCodePoint(b);
b = readByte();
}
return sb.toString();
}
private static char[] ns(int n)
{
char[] buf = new char[n];
int b = skip(), p = 0;
while(p < n && !(isSpaceChar(b))){
buf[p++] = (char)b;
b = readByte();
}
return n == p ? buf : Arrays.copyOf(buf, p);
}
private static char[][] nm(int n, int m)
{
char[][] map = new char[n][];
for(int i = 0;i < n;i++)map[i] = ns(m);
return map;
}
private static int[] na(int n)
{
int[] a = new int[n];
for(int i = 0;i < n;i++)a[i] = ni();
return a;
}
private static int ni()
{
int num = 0, b;
boolean minus = false;
while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
if(b == '-'){
minus = true;
b = readByte();
}
while(true){
if(b >= '0' && b <= '9'){
num = num * 10 + (b - '0');
}else{
return minus ? -num : num;
}
b = readByte();
}
}
private static long nl()
{
long num = 0;
int b;
boolean minus = false;
while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
if(b == '-'){
minus = true;
b = readByte();
}
while(true){
if(b >= '0' && b <= '9'){
num = num * 10 + (b - '0');
}else{
return minus ? -num : num;
}
b = readByte();
}
}
static String[][] BURY = {
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"...............########...............",
".............############.............",
"...........################...........",
"..........##################..........",
".........####################.........",
"........######################........",
".......########################.......",
".......##########....##########.......",
"......#########........#########......",
"......########..........########......",
".....#########..........#########.....",
".....########............########.....",
".....########............########.....",
".....########............########.....",
"....########..............########....",
"....########..............########....",
"....########..............########....",
"....########..............########....",
"....########..............########....",
"....########..............########....",
"....########..............########....",
"....########..............########....",
"....########..............########....",
"....########..............########....",
"....########..............########....",
".....########............########.....",
".....########............########.....",
".....########............########.....",
".....#########..........#########.....",
"......########..........########......",
"......#########........#########......",
".......##########....##########.......",
".......########################.......",
"........######################........",
".........####################.........",
"..........##################..........",
"...........################...........",
".............############.............",
"...............########...............",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"...................####...............",
".................#######..............",
"..............##########..............",
"...........#############..............",
"........################..............",
".......#################..............",
".......#################..............",
".......#################..............",
".......#################..............",
"........######..########..............",
"........###.....########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
"................########..............",
".......##########################.....",
"......###########################.....",
"......###########################.....",
"......###########################.....",
"......###########################.....",
".......##########################.....",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"..............#########...............",
"...........##############.............",
"........###################...........",
".......#####################..........",
"......#######################.........",
"......#######################.........",
"......########################........",
"......#########......#########........",
"......#######.........#########.......",
"......#######..........########.......",
"......#######..........########.......",
"......#######..........########.......",
"......#######..........########.......",
".......######..........########.......",
"......................#########.......",
"......................########........",
".....................#########........",
"....................##########........",
"...................##########.........",
"..................###########.........",
".................###########..........",
"................###########...........",
"...............###########............",
"..............###########.............",
".............###########..............",
"............###########...............",
"...........###########.....#####......",
"..........###########.....#######.....",
".........###########......#######.....",
"........###########.......#######.....",
".......###########........#######.....",
"......###########.........#######.....",
".....############################.....",
".....############################.....",
".....############################.....",
".....############################.....",
".....############################.....",
"......###########################.....",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"..............##########..............",
"..........################............",
"........####################..........",
".......######################.........",
".......#######################........",
".......########################.......",
".......########################.......",
".......########.......##########......",
".......#######.........#########......",
".......#######..........########......",
".......#######..........########......",
"........######..........########......",
"........................########......",
"........................########......",
".......................########.......",
"......................#########.......",
"...............###############........",
"..............###############.........",
"..............##############..........",
"..............###############.........",
"..............################........",
"...............################.......",
"......................##########......",
"........................########......",
"........................#########.....",
".........................########.....",
".........................########.....",
".........................########.....",
".........................########.....",
"........................#########.....",
".......###.............##########.....",
"......########........##########......",
"......##########################......",
"......#########################.......",
".....##########################.......",
"......########################........",
"......######################..........",
".........#################............",
"............###########...............",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
".....................#####............",
"....................#######...........",
"...................########...........",
"..................#########...........",
".................##########...........",
"................###########...........",
"................###########...........",
"...............############...........",
"..............#############...........",
".............##############...........",
"............###############...........",
"...........################...........",
"...........########.#######...........",
"..........########..#######...........",
".........########...#######...........",
"........########....#######...........",
".......#########....#######...........",
".......########.....#######...........",
"......########......#######...........",
".....########.......#######...........",
"....##############################....",
"....##############################....",
"....##############################....",
"....##############################....",
"....##############################....",
"....##############################....",
"...................########...........",
"...................########...........",
"...................########...........",
"...................########...........",
"...................########...........",
"...................########...........",
".............####################.....",
"............#####################.....",
"............#####################.....",
"............#####################.....",
"............#####################.....",
".............####################.....",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"........######################........",
"........#######################.......",
"........#######################.......",
"........#######################.......",
"........#######################.......",
"........######################........",
"........#######.......................",
"........#######.......................",
"........#######.......................",
"........#######.......................",
"........#######.......................",
"........#######.......................",
".......########..########.............",
".......####################...........",
".......######################.........",
".......#######################........",
".......########################.......",
".......########################.......",
".......#########################......",
".......########.......##########......",
"..........##...........#########......",
"........................#########.....",
".........................########.....",
".........................########.....",
".........................########.....",
".........................########.....",
".........................########.....",
".........................########.....",
"........#...............#########.....",
".......####............#########......",
"......########.......###########......",
"......##########################......",
"......#########################.......",
".....#########################........",
"......#######################.........",
".......#####################..........",
".........#################............",
".............##########...............",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
".........................######.......",
"....................###########.......",
".................###############......",
"...............#################......",
".............###################......",
"............####################......",
"...........####################.......",
"..........################............",
".........############.................",
"........###########...................",
"........#########.....................",
".......#########......................",
".......########.......................",
"......########........................",
"......########........................",
"......#######....########.............",
"......#######..#############..........",
".....#########################........",
".....##########################.......",
".....###########################......",
".....###########################......",
".....############......##########.....",
".....##########.........#########.....",
".....#########...........#########....",
".....########.............########....",
".....########.............########....",
".....########.............########....",
"......#######.............########....",
"......#######.............########....",
"......########...........#########....",
"......#########.........#########.....",
".......##########.....###########.....",
"........#########################.....",
"........########################......",
".........######################.......",
"..........####################........",
"...........##################.........",
".............##############...........",
"................########..............",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......###########################.....",
"......############################....",
"......############################....",
"......############################....",
"......############################....",
"......###########################.....",
"......#######...........#########.....",
"......#######...........#########.....",
"......#######..........#########......",
"......#######..........#########......",
"......#######..........########.......",
"......#######.........#########.......",
"......#######.........########........",
"......#######........#########........",
".......#####.........#########........",
".....................########.........",
"....................#########.........",
"....................########..........",
"...................#########..........",
"...................########...........",
"..................#########...........",
"..................#########...........",
"..................########............",
".................#########............",
".................########.............",
"................#########.............",
"................########..............",
"................########..............",
"...............########...............",
"...............########...............",
"..............#########...............",
"..............########................",
"..............########................",
".............########.................",
".............########.................",
".............#######..................",
".............#######..................",
"...............#####..................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"...............#########..............",
".............#############............",
"...........#################..........",
"..........###################.........",
".........#####################........",
"........#######################.......",
"........#######################.......",
"........#########.....#########.......",
".......#########.......#########......",
".......########.........########......",
".......########.........########......",
".......########.........########......",
".......########.........########......",
".......########.........########......",
"........########.......########.......",
"........#########.....#########.......",
".........#####################........",
"..........###################.........",
"...........#################..........",
"...........#################..........",
".........#####################........",
"........#######################.......",
".......#########......##########......",
"......########..........########......",
"......########..........#########.....",
".....########............########.....",
".....########............########.....",
".....########............########.....",
".....########............########.....",
".....#########..........#########.....",
".....#########..........#########.....",
"......##########......##########......",
"......##########################......",
".......########################.......",
".......########################.......",
"........######################........",
".........####################.........",
"...........################...........",
"..............##########..............",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"..............#########...............",
"............#############.............",
"..........#################...........",
".........###################..........",
"........#####################.........",
".......#######################........",
"......########################........",
"......##########......#########.......",
"......#########........#########......",
".....#########..........########......",
".....########............#######......",
".....########............#######......",
".....########............########.....",
".....########............########.....",
".....########............########.....",
".....#########..........#########.....",
"......########.........##########.....",
"......##########......###########.....",
".......##########################.....",
".......##########################.....",
"........#########################.....",
".........########################.....",
"...........############..########.....",
".............########....#######......",
".........................#######......",
"........................########......",
"........................########......",
".......................########.......",
"......................#########.......",
"....................##########........",
"..................############........",
"..............###############.........",
".........###################..........",
"........###################...........",
"........##################............",
"........################..............",
"........##############................",
"........############..................",
".........######.......................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
".......................####...........",
"......................######..........",
"....................########..........",
"...................##########.........",
"..................###########.........",
".................############.........",
"................############..........",
"...............###########............",
"..............###########.............",
".............###########..............",
".............##########...............",
"............##########................",
"............#########.................",
"...........#########..................",
"...........########...................",
"..........#########...................",
"..........########....................",
".........#########....................",
".........########.....................",
".........########.....................",
".........########.....................",
"........#########.....................",
"........########......................",
"........########......................",
"........########......................",
"........########......................",
"........########......................",
"........########......................",
"........########......................",
"........########......................",
"........########......................",
"........########......................",
".........########.....................",
".........########.....................",
".........########.....................",
".........#########....................",
"..........########....................",
"..........#########...................",
"..........#########...................",
"...........#########..................",
"...........##########.................",
"............#########.................",
".............#########................",
".............##########...............",
"..............###########.............",
"...............###########............",
"................###########...........",
".................############.........",
"..................###########.........",
"...................##########.........",
"....................#########.........",
".....................#######..........",
".......................####...........",
".........................#............",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"...........####.......................",
"..........######......................",
".........#########....................",
".........##########...................",
".........###########..................",
".........############.................",
"..........############................",
"............###########...............",
".............###########..............",
"..............##########..............",
"...............##########.............",
"................##########............",
".................#########............",
"..................#########...........",
"...................########...........",
"...................#########..........",
"....................########..........",
"....................#########.........",
".....................########.........",
".....................########.........",
".....................########.........",
".....................#########........",
"......................########........",
"......................########........",
"......................########........",
"......................########........",
"......................########........",
"......................########........",
"......................########........",
"......................########........",
"......................########........",
"......................########........",
".....................########.........",
".....................########.........",
".....................########.........",
"....................#########.........",
"....................########..........",
"...................#########..........",
"...................#########..........",
"..................#########...........",
".................##########...........",
"................##########............",
"................#########.............",
"..............###########.............",
".............###########..............",
"............###########...............",
"...........###########................",
".........############.................",
".........###########..................",
".........##########...................",
".........#########....................",
"..........#######.....................",
"...........####.......................",
"............#.........................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
".................#####................",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"......###########################.....",
"......###########################.....",
"......###########################.....",
"......###########################.....",
"......###########################.....",
"......###########################.....",
"......###########################.....",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
"................#######...............",
".................#####................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......##########################......",
".....############################.....",
".....############################.....",
".....############################.....",
".....############################.....",
".....############################.....",
"......###########################.....",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
".................####.................",
"................######................",
"................#######...............",
"...............########...............",
"...............########...............",
"................#######...............",
"................######................",
".......#####....######.....####.......",
".......######...######...#######......",
"......#########..#####.#########......",
"......###############.##########......",
"......##########################......",
"......##########################......",
".......########################.......",
"............##############............",
"...............########...............",
"..............###########.............",
".............#############............",
"...........########.#######...........",
"..........########..########..........",
"..........########..#########.........",
".........########....########.........",
".........########....########.........",
"..........#######.....#######.........",
"...........#####......######..........",
"............###.........##............",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
},
{
"......................................",
"......................................",
"......................................",
"...........................####.......",
"...........................######.....",
"..........................#######.....",
"..........................#######.....",
".........................########.....",
".........................#######......",
"........................########......",
"........................#######.......",
".......................########.......",
".......................#######........",
"......................########........",
"......................#######.........",
".....................########.........",
".....................########.........",
".....................#######..........",
"....................########..........",
"....................#######...........",
"...................########...........",
"...................#######............",
"..................########............",
"..................#######.............",
".................########.............",
".................#######..............",
"................########..............",
"................#######...............",
"...............########...............",
"...............#######................",
"...............#######................",
"..............########................",
"..............#######.................",
".............########.................",
".............#######..................",
"............########..................",
"............#######...................",
"...........########...................",
"...........#######....................",
"..........########....................",
"..........#######.....................",
".........########.....................",
".........#######......................",
"........########......................",
"........########......................",
"........#######.......................",
".......########.......................",
".......#######........................",
"......########........................",
"......#######.........................",
".....########.........................",
".....#######..........................",
"......######..........................",
".......#####..........................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................",
"......................................"
}
};
private static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); }
}
Comments NOTHING