#include <stdio.h>
#include <string.h>
#include "gmp.h"

#define X_MIN -15
#define X_MAX 30
#define Y_MIN -5
#define Y_MAX 40

/* 
 above viewport -15<=x<30 and -5<=y<40 is sufficient to see most interesting part of resulting graph
 full view can be obtained with view port -15<=x<352, -1950<=y<116
*/

char* strnnn="451829455427167905438974674632984286623839698774819118392124239671226125763831138164481549272623916905552734721752264970444405354581721191208014812609452679198572691100957913783497497176088011354568005019678400379852238675483241254568186323067878089597942663379841980004552817081552356112375228428273552115265491746251024926235222513012991428395869845101803659358941274256555456804977478165207224987967797442864706154017930397105023896381311359542253168131154987060690649212516701935292837772874924910304268785425565002681258841027351140127013014101947314091148340702557138774250029417517869474372694510089876601676206858056190368350672801283620068262071469591003093830234013118145469459588246015374855406851421852714558313003534237173099162267350141719117322408415910022333719206244855568382051655329648797929405287024051648095930591156247479508294889113919671181948701235782670840180497758389395164228363818052337146813876659011150032660204003090672280723724432669733847449489036385043999326348598231235323157775707215612995389590060811470372532679125834951412317907010043657965635289334740205100188634927109822604561064653112289585867629175681176948176276226059498086544722400347359591724584057479551557651175483468377757586050767452596646748690697623063063986760153648307725089444928696194051156985628323911817451542400651928847808686637138791688544695893597292770113737739347606825625358628176776936679330680992162159252322100877817620938911754882864817943848398025451581179305328826773267303806086309725165034771656928819046595878060286218392603022547339270807564918479264257484292336783080312820413514472917490128597725615796966127305329165241687450624834087961010506043415732733178932150490648430448139784046351782939659355225431094504484518548302732381978179997168667987604050265054930426528396698896200000876453552301155834979810787081665355187952557535038023936799691309773398230738155620751669144589489125549138705590689447019818539037425703908678767952762424147811475125028143966241237428663575139628902971016947705580043355326579656387141715404371193938355216715611644802084569495914135907766243341428594571612326417015322510344756857719881117888392927780853256469263898184268435126195706146660805381438363190020751956901455466070967435372057192260170650421093263668700290581258063422602047296041249323347752195062753982402962435491340051376242553493254313643732702674077353979225491602018764521280412224337113691522294686915564111541829703533874909407622405268920520393006182120034536879111024637781504894003365822727027881967113841503303818665043723884553314922451618341186002300438220848687874113195034982663699267491066921450744496041759614753954569585037387209009979907197317759811916658741470396865089685211799587791518000808987951751036703780472824562847145320787766471737676778193025449134083957977169113279002923068166594749223010840344208136486104090635188067691898315940923381826856739869574180955101949359210226491873755516717056533692068484377490388379870405167863784302409589349207422949127012140830160683561066014660543904128754971941765358348552978549927950316738959345241678304698309392249823795127048476472642016277367810783725292232632244797935763492833734775981693234317036765141423144357823058062479612259464845433427998260769103539942022350048469496956508888540962505224221264737627976955009308039257993623327583646125712916328382198983664118878624208330126313036526407492436634546770969155236666233430887256780094934200968590674029482978643842017928953823059798457863368451301877614483451991044898967750330033533775309505885729346046152500688939371333456373658615835941079559762171982933833415671634003192558013152469826719712843382473057618703096681712789617460615187691863796558968376681685469495011916520386324046577811753513167948693588247017216119526145311351429638070802128430404679652368847629562916459304058985672675215330672985997788821165733788021703481787985183335363942857635872940968541151943597911442313152429980422318092421347718382945986542572569095542316150247639945164876141017255200861452243207730581508500435448893226219574389632597637220272016446903682192877427421236566201329304448839288182042321378923685534866095011496136876960174824446366758510153249507103140630283194242557018366799949515305165613567576101601290299137129912211367549001095079646250584337855719614959900140929752114448358835363170372600764620017202529735370876468656005883732657153829119195795539127095057733637233475741958836741895470002747857089453164751576259923276071230691690109662561291545501182454403538685771170297580396609641599043649734042373880821701514400270358701751487266883310053238966358403789497867819526200528236355477925665847735782929914957642281817586649464025849098669760524300573064444492338056772788928271174670451960875601659640665869135954498135563518677659614698813991822684372366816567348829799447200357397157628245179962251054367433993388237884983518767796298274012823427786354955195157952646788723699279254649840163750734322788460106861941261374759294061366149218825724594056021509492561988818551305661537235347591740084381738103193781540501177698954016221092674512165980252495523500932637273153807483185933678803024340943985196607795393031191860986803301010783964656981334016423938460611270640572611511302254475928603896177163208699293130865981811279851036203556599388392759738618301720783130767793283226340840180453826956399762678481100488885416353802787208629193771940251646163355914142448625545301970175506897604056568713059994612899724604982213123490078544242540658879866978339934081925623067393148645280778940013418600085099245060063065383374514986965812600327693099251231195853323186058113158723836408654981365323266265032777048357414115657900480969916918581295861711612275266821259730986829016280008240450019660957714216852587301986611108385835911386252562597448353112448667976161028922328831907390065216832078167370441072945886837289775086687329049300846501807241082622372583525465682929275012295274124689324519887129684371960849956851674305633281645491514646678526286509318154713926035532616232627570292277215691672180105980929800907931131005637441649805873921306642094708049905651370605271197355568442590705273493739964386933254052898807559375433269864759418093249867705361314422852506859037801936880276576862338785672087914318342856079005286976032983950387524023959389669849537196061579004744255672534062518107641474908476448248055736912118209832146209540936014651454379372714001314968923583858636842731079255288361611630405736507577616126922595342736686353688189971874387066491080425223840764911385549146606821740130623024638911333311363431136187090141860800150120097032240123373000328132135264991537504749436821832627581544359834058220813188158593165532291312526636869949957988909324727180340809139540574150521724973699671287298043690062253114050244607119586706746311089792351754045278881968674613313738321144933229073115400165543083297039904224170308315621377950529019130234719895476259700248200488126500150803046781749260393493587771140329804372601240303325658570267405573793768096243876044470539592810067283171187179155634530825248497878024297134820326663184855956120687900754591066229937198728186318856363370042878397889353781669631406887079696497182969484691561794645496294351894256110138495578789167258381975154904803593608654882431292804425744042512836145182444041206810517884243292375214728798477932309970234573806683028406774937488091055514738600211653657548255273708923211911838773551769551905227546996466907344165329892805249658955720406960338316080530634011107954326798997657737691070081129940010773126264180942944442111123341212009614654649372642384714278244470073294853163783490650904344389720531178137616342243770789843654789783873844804570336252313190358032479811492790552794124424786148838891522697321914593976885525955304330256989583177521121110832542731297566154468616136749968738377039828270825240491497408675939031265064953230729919911905092045400382882662731130674479390745047038255742908658974395515345422010035077636899742279116424832624616221413783953584514255681192971650035177880601021864113929332913585358638613144489996850161269762851699910929595862596676068996499243330662601872052065867373127395058252500597360749388694506309075255927953500341064695462059044524261125485392260704963563559377669016098675978318417530043404003198855884742596771983862567292567248590106675565494566372747974031848444063954783915532845363780203655506947660773312020661399168815446192725479795705274847765138900364974746306388597767191851456703789270520355790017157441385644778710850515123866309372255443572309844414092912170199275075556848677662195540816544895483056044613189702120506095033830611038319615510688410021225099729402334018811259569324376045765651006972095514453407310892520540574536247613881986671742741920368378760587045395792126845912794188645298123179404045021678634246323472922002591056691103954111324431443614029235404135461570981603203972285789836984258283915785963681729802467528767461705918966437577454884118081142617313917925797648100871831703679828093732664441157063572566196073605690368576396949780622347753260482240989725287093735008802252916799852155399651148982598667722762344929615638486092946047679699446320993215590948164679956362815044864567397676692145647471637002886835010566380796918294829972219052598569203293614145207175246338514537354247439915673610913680083283598376030921133412954388674266682070565625041939624021686236404376569081757819922284524675907681296379623628834305510440208901498757557853390373539639540242431145490093284507785502560230975556471765916251356797010361891542770685626103743561794645083439811303285819347282748957347736603542093804819412079167281032994209585979046345087199519094606133758917650347430303386134111242224137026625675517074615948799454559338593019374353500238500191810057031966005483618288498903425508596297858997529879593069455689595136297404435357066558072089914255252167402728609885670858165618662930641262688429938788666955586723525537326750739049695262546057521879171060319113569358367797804172208422561131711775823217227380681574279067266865533333295056127753197239571909782170563836721777900792575603867654681369385143955554751460666489315676859097357613291207699139359353618351604908676708105210449567465618598428654470869543581013727299082884353594942942574196327174646380878999521846161520312574778443363702683061936900116325430432217252503663302923199144746520236095549937132265746783564632743674422969860757716309985955477355152780130972861143552989747223135291971443015043932850028519913139074984100593998329738526343504676872274790638807606831931396088970099976991449906037864929962202432940941282936305374680704283976733905815455031249513669072047135651251918736233412267798308569660334344603957802716331809911234767700621238587226486744668173756029850275142532447542865399230109091533009603874307244944500835561112715894428694392255536286865329391151123342537588886297770358337277037194865180694665705536552362962336804838809703572333520943666629929355912909621392475841315668353432891499030498339149044597235610103544405251814000332401465095567274032026769280997547178061891533199676465813690893818489995063553803677775175636915989140526774523652434898700421120460307814503004008102626645699429745535551153806611857938648865612936761213071760980988841373670080329117704002819628965059414572934492964973765905293636879832996075557756008170775823842120793275974977004185235270074067600489124049964931341349566284067637653774943484784335826281987612597620245449648557388010579279692003085267417132435742318728828817315676896537833348034995911376268337412945324826935493525954331048807334140389106006253175747451102434237479602899317046421531082651550001699015147602459627544531152097512581122910818560956833728518324228195761152476366696062145460599999535899285708161375476650383511876337707318881757226167058698108892885766597134933100257999569643917712127763683128775381210150529783723624584771112013585266099124890425632419870576613598698863178696060667973413208972732633826830520104785222197807492887487989451646221515632295711977906989442683665239086016445914427708189290450144248561122558060251253121757695067711580556462561095576138938474804457747666530281905976863346962636884255570868792509195549798769459622369214061182697426831633018786671925542888428886283200075365695144925805872269276442067623392955171293409782614642114482091425728927816786187938022097941975439421104631731891403947294147070325724813330337568580165789891466286654914517079719790584192946142546024634987309792798939368374384751505285385203597237979246846271575738841108973991103358151359672812505414308309501058336958048574128467278859276167061015302322082031803660716287139092942101137985660162384650811028730412087995432958445305970779414229054907942298005285830831108272569522835155898676712553301646787403829908387305878";

mpz_t nnn;
int nnnBase10Len;
                               
int g(mpz_t t, int a, int b, int x, int y) {
  if (0<=x && x<a && 0<=y && y<b) {
    mpz_t tdiv;
    mpz_init(tdiv);
    mpz_fdiv_q_2exp(tdiv, t, a*y+x);
    int res = mpz_fdiv_ui(tdiv,2);
    mpz_clear(tdiv);
    return res;
  } else {
    return 0;
  }
}

int h(int x, int y, mpz_t k, int p) {
  if (p>=0) {
    mpz_t ndiv20modk10;
    mpz_init(ndiv20modk10);
    int k10 = mpz_fdiv_ui(k, 10);
    mpz_fdiv_q_2exp(ndiv20modk10, nnn, 20*k10);
    int gres = g(ndiv20modk10, 4, 5, x-5*(p%40),y+6*(p / 40));
    mpz_clear(ndiv20modk10);


    mpz_t kdiv10;
    mpz_init(kdiv10);
    mpz_fdiv_q_ui(kdiv10, k, 10);
    int hres = h(x,y,kdiv10,p-1);
    mpz_clear(kdiv10);
    return gres+hres;
  } else {
    return 0;
  }
}

int f(int x,int y) {
  int hres=h(x,y,nnn, nnnBase10Len);
  mpz_t nnnDiv2to200;
  mpz_init(nnnDiv2to200);
  mpz_fdiv_q_2exp(nnnDiv2to200, nnn, 200);
  int gres=g(nnnDiv2to200, 367, 116, x+15, y);
  mpz_clear(nnnDiv2to200);
  return hres+gres;
}


int main(int argc, char** argv) {
  mpz_init(nnn);
  mpz_set_str(nnn, strnnn, 0);
  nnnBase10Len=strlen(strnnn)-1;
  for (int y=(Y_MAX)-1;y>=(Y_MIN);y--) {
    for (int x=(X_MIN); x<(X_MAX); x++) {
      int res=f(x,y);
      putc(res?'#':' ', stdout);
    }
    printf("\n");
  }
  mpz_clear(nnn);
  return 0;
}

