Categories

How to log / debug: SOLR DataimportHandler script transform


function transformer(row){
var log = java.util.logging.Logger.getLogger("expand_multi_string_entities");
var LEVEL = java.util.logging.Level.INFO;
// set info level via http://localhost:8983/solr/#/~logging/level
// to log to solr01.log
//log.log(LEVEL, "hello world")
}

You’re welcome.

Basic Development Infrastructure is a Silver Bullet

Below is a typical complaint from a new developer, as well as the typical response:

I’ve inherited 200K lines of spaghetti code — what now?

The typical problem is that a developer has inherited a complicated, undocumented application. The typical response is the rigid imposition best practices.

Unfortunately, to be viable process improvement must deliver fruit within an organization’s funding cycle. Thus, any investment in best practices is tightly coupled to organization size.

The first improvement should always be to document the basics:

  1. What is the “code” ?
  2. How are changes made to the “code”?
  3. What is the “data”?
  4. Where / how is the “data” stored?

Next establish the following environments:

  1. production: where users do work
  2. staging: where developers and users work together
  3. development: where developers work alone

The key is identifying a reliable way for “code” to move from development to staging to production, and for “data” to move from production to staging to development.

There are many forms of distribution. Could be copying a file, updating working copies, or uploading rpm’s to mirrored package repositories. It doesn’t matter so much what way is identified, so long as it is reliable for the organization.

Similarly, there are many ways of backing up and restoring data. There are likely many vendor specific tools. Again, reliable is the key.

Establishing the development architecture allow any developer to quickly gain traction and implement other improvements.

Facebook Couple’s Moment

Scenes from Belize

Patrick Way, Scene 16

Patrick Way, Scene 18

The Three Little Pigs

Documentation of my recent installation at Associated at Open Source Gallery

From the release:

“Associated” is a site specific show in a severely damaged brownstone on 17th Street in South Slope, Brooklyn. Just after noon on 12 November 2010, a boiler exploded at the Associated Supermarket on 5th Avenue and 17th Street, igniting a fire that tore through the block, destroying Open Source Gallery. Next door to Open Source a three family house–the gallery owners’ home–was also rendered uninhabitable by firefighters’ efforts to stop the blaze. The exhibition, “Associated”, curated by Monika Wuhrer, Raphaela Riepl and Frank De Leon-Jones resurrects the derelict house with projects by 30 artists.

My installation was in the boys room. After cleaning out the broken glass, I arranged the boys’ belongings onto the bunk bed and setup a projection over the tableau. The projection is a Processing app which displays the text of the The Three Little Pigs. It uses the ASCII character codes of the text to calculate color and placement glitches.

MongoDB Content Taxonomy Schema

The greatest thing about MongoDB are the replica sets. It is a nice feeling to have failover and distributed queries across 3 database machines. It’s also nice to replace all 3 in one evening with constant application availability.

But the next great thing doing CMS work using MongoDB is that all records are documents. That is to say each record is an open ended collection of key/term pairs. It is nice to tack on additional fields as the content evolves to more structured forms.

Where this agility breaks down is with evolving query requirements. Scalable MongoDB performance requires indexes, but there is a hard limit on the number of available indexes.

In particular, context taxonomy can easily lead to an explosion of fields with a subsequent explosion of query techniques an indexes. For example, this post might have the following fields:

  • Category: Tech
  • Tags: MongoDB, Taxonomy

This is a collection of key / value pairs. Both keys and values are short with a few words as the maximum length. A given key can have one or more values. The values for a given key should be a unique set with no duplicates, though two keys may have identical values.

Finally, on a request I will start with slugs rather than actual values:

http://hexane.org/blog/category/tech

So not only does the database need to support queries along the structure outlined above, but also needs to lookup by slug. Thankfully there are a limited number of keys (<20) making hard coding the mappings an option. Values can be anything, so the schema needs to accommodate.

Initially this data was stored in discrete fields on the root document. Each field had its own index. Each unique combination of query fields also necessitated a unique index. Furthermore, there was a centralized and growing collection of slug2term mappings. Things got out of hand quickly.

The Solution

The solution was to leverage MongoDB’s dot notation queries. You can index on the basis of a dot notation query.

Inserting the Data

Insert the data as an array of key / term / slug documents under a single field name:

db.article.insert({
  title:'wealth news article',
  taxonomy:[
    {key:'section', term:'News', slug:'news'},
    {key:'topics', term:'Wealth', slug:'wealth'}
  ]
})
db.article.insert({
  title:'retirement news article',
  taxonomy:[
    {key:'section', term:'News', slug:'news'},
    {key:'topics', term:'Retirement', slug:'retirement'}
  ]
})
db.article.insert({
  title:'wealth blog article',
  taxonomy:[
    {key:'section', term:'Blogs', slug:'blogs'},
    {key:'topics', term:'Wealth', slug:'wealth'}
  ]
})
db.article.insert({
  title:'retirement blog article',
  taxonomy:[
    {key:'section', term:'Blogs', slug:'blogs'},
    {key:'topics', term:'Retirement', slug:'retirement'}
  ]
})
db.article.ensureIndex({'taxonomy.key':1,'taxonomy.term':1})
db.article.ensureIndex({'taxonomy.key':1,'taxonomy.slug':1})

Note a couple things here:

  • The data is not normalized. This is quite intentional. Replica sets are fast, but in general you want to minimize the number of centralized tables when designing a distributed database.
  • The generated slug is stored alongside the term. Losing some disk, but otherwise unconcerned.
  • There is one set of indexes for all possible taxonomy fields!

Querying the data

So now here are the queries. To properly match a particular key / term pair I use the $elemMatch operator. To execute multiple queries I use the $all operator.

db.article.find({
  taxonomy:{
    $elemMatch:{'key':'section', 'term':'News'}
  }
}).explain()
db.article.find({
  taxonomy:{
    $elemMatch:{'key':'section', 'slug':'news'}
  }
}).explain()
db.article.find({
  taxonomy:{$all:[
    {$elemMatch:{'key':'section', 'slug':'news'}},
    {$elemMatch:{'key':'topics', 'slug':'retirement'}}
  ]}
}).explain()

At the end of the day, any database is going to require some queries. These are not the most beautiful things in the world. But scaling is harder than performing development, and replica sets make it all worth it.

PasteBin of the above solution

Daft Punk: Around the World Lyrics

Python Version

print “\n\n”.join(["\n".join([', '.join(['around the world' for i in range(2)]).capitalize() for i in range(4)]) for i in range(18)])

Original

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world 

Around the world, around the world 
Around the world, around the world 
Around the world, around the world 
Around the world, around the world. 

Cornfield

;      ;  ..        ` , ,   ,.`` ,.;.` ` ;` ,  .  .   ,  , `  ``.`     `                                                                                                    ...``  ``              , .':
'      :  ;`` `  `` . ::;`  :,`` :;;.,  `:` , `,  ;   :` , `  .` ``                                                                                               `         : ,..  .`            ,`;:''.
' `   ;;. ;,` .  .` . ..;,  ;.` `;';,:  ,:. , .,  :`  .  : `  .` `  `                                                                                             .         :`.... .  `          ,,+;+`,
' ``  ;:``;:  .  `. , ,`;' `:`` `;+;:, ,;,;.: ,. . `   ` , `  :: `  `                                                                                             .         `.,,.``, ` ` ` `.:```,:+ ','
+```  +:,;''` .   . . ``;'`,;`,.,;';::.:::'.,`:. ; `  `: '``  :, `  . `   `                                                                               `       ,       .  ,,.``.`.  ` . .,:;;;';'::;'
+: , ,;,,'''.   ` : .``';; :;,:,:''';::,;:' ,,:` ' `  ,:.'``  ;; `  . `                                                                                   ` `     ,       ,` :,..,.`. `, , .:;;'';;;'': 
+,.` ;':'''',  `` : .,.';;.,;:+`,'';':,;';+`:.;;:'``` :;`',.  ;. ` .`     `                                                                               `       ,      `:``;,.., `...,`..:;'''+;;;;+:;
#'`, '''';+':```. ;`:'.';;;::,+:;:'';,';;;+,:;','':,,.:;.''. `;.`` ;. .  ``                                                                    .          `       .    ```;...,.,.. .,:,,,';;;:;';;'++:.
#;:::;+;+'+';,  , ;`:;`,;+;;;;';+';':';';;';':':'':;:,'::;::``;,```;``.  ,            ``                                                       .`        ``       .    :,,;:.``,:`..` :,`:'+'+;;';;+++;;
#+,:;++'+;+':;.`, :`:;,.;+;:';;'+'++':'';'';;;';'';:::';;'+:.,;,.,:,```  `         `  .                                              `      ``::         ``  `    . ```;,;;;,.,.:`,,`.::.;'';'':;;'+'';'
#+:;+'''+'+;:';;:`:,;;':;+';';;'''++';++'+#;;'';'+:;;:';''':.;;', '::,. ;`        ,,``:                                          `   `   `...`,;,   ``   ..``:  ``. ..,;:;::,,:.:,,:,,:;;;''+''';;';;';:
#+''+''+#;';'';'::,;';::'+'''';'''+++';+++#;+;+:;:::;:';'+';,';',`':::..'        ,:;.:,                                   `     ,.`  `  ,.,...:::`  ``   .,`,;` .,``,::;:::;:,::,:,,,:::+;':;'''';;';;;:
##''++'+#'';''':;+,;';:;;''''';+;+++'';+'+''''':;::;::+:;'+::',';:';;',:;````   ,;';,:;.  ,.                            ` .   ``::,```` :,:.`:,,,,``,``  `:`:'` ..``,::::::;:;:;,:.;,;::';;;;;'';;';;:';
#;:'++'+#';;##+';+;;';;';':;'';+''#';;;+;;+;';':+:''::+;;;+:;',;;':::+,': ..``  `;:''',;, ;:,                         ` .::, ,:,:;,.,.``,:..,.,,,,.`:..``.:`;',`,...:,:::::;:;:'::.;:,;:;':;;;';'''''::;
##;'++'##';;#'+;'';:'';;;+;:;';'''#;:;'';#+;++';+;;;;:'':;+;'+;;:'+';+:':::;::``:;;:;':;::;;:.` ``                ```,``:::: .:::;,,::` ,,`,..,,`,,,;::``,:.;,,`,.,::,;::::'::'+;:.;::;,;;;';:';':;''::'
+#++'++++'''#'''+';;''';'++:;':;+++;;'''+#';+'';'+;';:'':'+;;+;':+':''',;,,;,.`.:::;:;;:';;;;,:`.:                .,:,,,;:::::::::.,:.``:,,;.:,,.::::;:`.::,':,`,,,,;:;::::;,::+::,;;,:,,;#;;;;'::;;;:,'
##++''+#';''#';;'':';;':'+'';:;''++;''''+#+'+'+''':':::;;;';'';;';+:';':;,::;..:::;;:::;';;;;;,:, .`.          ` .,,;:,:;:::::,;,;,,,,..,;::,:,:;,:::;:.:;::':'.::::::;:;::;,::+::,;';;::;#'';,::;;;::,'
##+#''+'';'+#';++;;+''+:'''+;''''+++;;+++##++''+;';;';:;;;':++;'++':'':;;:;:',.;,:;;:,;;;;;;'';,:` :` , :.   `..,,,:;:,:;:,,,;::,,,,:;.::;,,.;:,+,::;';,:':;':':::,,:;':'::'',:+:;;;;;;::;'#;;;;;;';::;;
##+++'+';;;##;;+#';;''''':;''';++++++'+++##'++''';''+;:;::;;+';;++'''';';;;:;:,.:::;,,;;';';;;`,.  `.,,;;'. .::,::::,:,,::.,::,:,;::::,:::,::;:,':::;;;::':'':+;::;::;':';,':,;+,:;'::;:;;:#+;;;';+';:';
+#+++++';''##;;++';+;';'':'+'+;'+'++'+++'##++';'+;''+;;';;:'++;'++;+'';;;';:;:':;;,:,::;';';';,  ;;.:.;;';:.`,,:,,::::,,;:,,:,,:,;;;;;,::;::;;,:;'::;'',:;:;::';:;;,:;';;;,';,:',::,;;;,;:';#;;''+#;;,+'
#+#++++';''#+''+++;+''+'';;'+;;'+'++'+++'#'++;;''';'';'':;:'++;'+';'+''+:;:;':;,,;:,.,;;;''''; `,,;;;.;''';,,;:;,,:::;:,;;,,:,:,:;;;:;:::;;::;;:'';,;''::.::;:'';:,,:;::,;:;',:',::,;;;:+:::#';;':#+,,+'
###++++;'+'#++'#+;'+'+++;'+;+':'+;+#''++;##+'',''';;;;+::;:'++;+''''+''+;:::';';:;,;,;::;'''+',.;;''';;'''';;';;::::;::,:;,,::;,;':;:';:'+;;;;;:;;::;,;:::.;::'';:;::::;:;;';,:+::;,;;;,;:,:'+';::#'::'+
##+'++'''+'#++'+#''''++'';+'++;'#;##+'++;+++;+,''+';';+:;',;+;;''++'+''+':,'''+';;:;,;:::;++'';;'''++''';;''';:;::,:;:;,::,;:;'.'::;;;::;';;::,:,:::;',':;,.;:;+;;;::;:,;;''::;::;;;;:;:':';;#+:';#+:,:'
###+++'''++#+'++++':++++''+''+''#;##''++'+#+;',++++;;;:;:;:;'::';;++,'''';:+,''';;';,;:,::'''';:;'++'';;;'+';;:::;::'::,::;:::;,;;:''';:;';;':::':::;::':'::,:;'':;::;;'';''::::::;';;'::;:::;#';;#':,:'
###+'+'+'++#++'+#+':#'++'++'+++'+'+++'++++#+;;'++;;::,;:;;:;++;';;++'':','':;+'''';;:;;:::'++';'''''+'''+'''';:::'::':,,;:;;:::;'';''';;:;';;;::;,::;::;::,;;:;';;::,;,,';'',:;;::,::;;:';:;:;##;'#',;;+
###+'+'+++##++#++++++;'+'++'+++;+'''++#+#++#'++++'';';:;;;:;++;,;++++';';;;:''':'';;;;;;;,'''''+'+'''++''''';;';:;,:;;,;;,;;::;;'':''';;;;';;;;:::::,:::+,:;':,';;':,:;:';'':,;';:;::;':;;:;;''#':#',,'+
####'+++'+#++':++'''+''+++''+'+'++:+++++#''#''+++#+;'+':;';;+'':;++++;'+;:';';',:';;;::;';;''''++'''+'+;++';::';;;;;;:;;;::::+;'';;;'':;;;;:;:;;:::::;:;+;:;+::+''';::;'';'';.;';,;:,;;;;;';';;#+;#',:'+
####'+++'+@#'+'#++;+++'++;'+++#+++:++++##;+#''+++#;'++;:'';'++'';++++;++;:.,''';',',;;'':':;;''+++''''+''+;;:;';,'';':;;;:;,:;;:':':;':;;:;,;:';::;:''::;;:'+;;+'';::,:'';';;.:';:;,;;;;:;';'::;#++',:'#
'###''+'++#+#+'@++'+'''++''+'##+'+:+''###'##';'+'#''++;:';''+++'+++'+'++:',;'++;;;;'+;''';:::;;+++'+'''';;':;;;;:';;;;;:;;::;;':',':;':;;;;,;:;;:;;,'';,:+:'';:+''';;;:'';';;.;;;;:,;+;;:;'+';;;#+';::'#
;###''';#+####+@#+;+'++++''++##++#:#'+###+#+':'++''++';;''''+++'+++++++'':;'+'+'++;'';+';+;::;''+''++;;;;;;:;;';;:,;;;;;;,''':;;';'';';;;;;:;:;;:;:,;'':;+:'';,'':'';':'';'':.;::',,'+;;:;''+'''+#+;::+#
'###'''++++':#+@#+'+'+++#'++#++++#;+;+####''':'++'+'';;;;'''++'',+++''';','++++';+';+;;;'';::;''';'''''+'';,;;;;:;::;';;;;:';;';;;'+:';';;;:',;;,:','+:.;+''';;'';:;;;;'';';:,'::'':':;;:;+:'''';##;,;+#
'###+'+#'##+#;#+#+'';++++'+'#''+'#;;;###++;'';'++++'';;:++''+++';'++++''':'+++':';';;+;'''::;;'';;;'';''''':;:;'+''::''';;;;,:;;;''+;;';;;;;':;;:,':'+.+':+';;''';;';,;'';'':.':;:::,';':;+;';'';##'+#+#
+@##'+##'+###+''##'';++++'+'#'++##;;;+#;;+;#''+;'+#+'';+++;;:++;++++++++;';+++;';''''+''++;;;:;;:;;;;;;;'':';''''':;;+'';;;;;':;:+;'::'';;;;;;;:::;+'+:+;;+;;;;'''+;;:;''''',,',:';:,';;:;';':'''+####+#
####'+##'+####'++#+'''++++++#'#'#+;;;+#''+'#''+'+#++''';'+;;'+++++'++'++'+++++;''+';+'+;+'':;:;:,:;;'::;+';:'';',''''+'+'';',;';:';',:'';'';;';:;::';;+;''+'';';''';;':'''''::'::';,;''':;''';'''+##'#'#
#@##+++#++#+#+'+'#+;+'++'++##++'++;:;+###+##''+++++,';';;'''++;##'+++++''++'+++'++;+''+''';;;;:;;;:;;::;;;';;;;';';''''+'':':'';;;:;:,'';';:;':,;:::+:+;;,'+';:;'+'';'.;''';;,;;;';:';'':';''''+'+#@##'#
@@@#+++#++####++'##'++++'+'++#+'#++;':++#+#+''+;'#++;'';;;':#++#''++++++'+;#+'';++;+''++'+':';:,';:,:;;:;''::;';;''+'+'+;;;':+';:',+;,'+';;:;::,;::,+;+:`:;+;+';'';'''';''''',::';,;','':;:';;'+'#@##+'+
@##++++#+'###+#;'#''+++++++###+'+++;';###'#;+'+#+++#;'+;:';;#'++,++#+++''++++';'++''++'''+;;''::;+;:;;';:'';:':'''+++''#;:;';+::'#,;+.';';;;;;::;:;,'+,.'';++;'''';''++;+'';';::';;'':'':;;+;;+'+#@'#+++
@@'+#+##''##+'+++'+'+#++++##'##'#++';;##+##;''+++#+##;+':';'++'':++#+++'+#+#++''#':;+':'+;;+'+;:''';;;'';';::;;''++'';'#;;:;;'';,;,'':'';:;;;:::;:;::+':';''+,'+''',';';;'':;;;:';;''''+:;,++'+:###:##++
++#+@+@##'#@+''#''+'+'+++'#+##+'#+#';'#+'#''+'####+'+;'';:'''+;';++#+'+'##+'++++#;+'+'+++::+'+;;'''''';';,:;;+'+++'+'';#;;:';,,;;;:';;;;,:;;;,:;;,;,;++';;''+;++''';:;';:'';:,:;';;':''+:;,+#+;+#'#:#@''
@+:+#+###'@@';+:''+':+++++#++++'#+#';;;;+::+''#:++'#'';';;;''+;';++#++'+#+++++++;++;''+'+;+'+';';+''+'''';':''''+'+;++++:++'':;;':;';:;'::;;;,::;:;,:++'+;''++++'''';'';,''':.;;;';';;'',;:+'+;##+#;+##'
###+++##+'@'';+;''':'#+#++#'#++'###;;:''+#++''#:+#;+;'+'''''++;';++#'#''++##+#++';+;:+''+;++'''++''''+'';::';'+++++:++';:'+'':;;::::':'';::;::;;;:;,'.'#';++++;#'''''+.'''''::;':';';:'':;:''+++##+;+##'
@@++#+@+#;+@;';'++,','+#'#+''##+###;;:'+#'#';'#:+';+:'+;';#;#+;';'+++#';++#+#+;++;+;'+++'++'+;+'++';'++'';+',;++'#+;'+'+;;+++::;+':;';'''::;.:;;;;;:;''+';++++'#'''';','''''::':+'';'''':;;'+'#'+#''+#@+
@@@##+@'';'+';''+,''':++'#+'+#@++#@;;''+###';'#:'+;+:'';';#+++';''#++#+''#++++;':;+;+++;:;+;+;:'+++'+++:;;'+:;'+'++;++;+';+++:;;+';,';';'::',:;';;';,+'+#;+++++'''+'';,`;''';:',+++;'''';;;'''#++#''+###
@@@+#+'';;#;;;:+,+'+''+'+##;##@#+##;;++'+#++#;#:++;#:''';;'+'+';'+#++++'#+++#++''':'++;''#+'''''++'++++;'';;'''+++'+#;'++;+''::,'';;';''+;;',:;';;';''+'#;+++++;''+''....:'';,'''+''';'+;;'';+#++##'+###
@@##+++';;#;':;:;#++''#'++';####+#++'+#;##'+';+:++;#;;'';''+'++'+#'+++''+#++#+#+#':+;#'';'+++;+'+++++++;+';:+++,+++++'+'''++::''+';'';'+';;'::;';;';+';+##'#+'+'+''';:.,'+';,:,+',';';'':;'':##;+;,:'###
@#''+''';;;',:+,####'+#''+#;##+#++##;+#'+#+#';+:#';';''';;+';++;+++:,+';+###+#++';;'+':'++':'''+'++'+++'+;'';::''++'++'+;'+++:+;''',;',,:';;'.:';;':+'''+#;#+;+';''',,:'+++;::;+;,';';'';:'''+'+'+:''###
@@''+'#';+;:,.''##+#'##'+'#;;#'#+###;+#'@;#++;#:+#;+;'';;'++'++';'++:+#'+#####+#;;+'+++'++++'''+'#+'+++;'+':::++'+'++''+;'+++;;;''+:;';:,':''::;;;;:++++'#+#,+++;'''',''+++:;:;',;';';'';:+'#'++'#+++'##
@@#;::#';';:.;'+@#+#'+;++;#;+#'++##@;'#+@##+#'#:'#;+''''''##+##'#++++;#'+####++#''';:''++#'++++''+'++;;;'+;+;+++++:'#+'+:++++;+;;'':'':':';+';:;;';:'.';+##,:'''';';''+;;++'':'',:+;'''':,+'#;;;#;@+'#+#
@@#::++';;:::;'+@#+''+'++;;;'+;'#'+#''#++#+##'':'+;+''+'''#+++#+##+#+;#+'###++##'++''+;++':;'+''++'++'+':+:+''#++#;++#'';'+++++';'+:'+:'';;+';:;'';;+:'';'#',;++';';:+'''+++:';':;';'+'+;:+++'+'+#@++'##
@@+:+#+;;;:;:;'++#++'+;+++';;+;+:''+';+'@++@#++:++;';'+''''++#++'++#''#''+###+;''+'#'+'++'++'''#+#+''++''+'++;++++'#++';;'+++;+'';+;';;'';;+;;';';::;:''+:#+:'++'':+++';+'++:';';'';;+'';:++++:#;@@+'#+#
@@''##+;;;';;''+#+++'+;+;#+;;';#:++#';#+##++@+':#';;;'#''';+'#+#+#+'++'#+++#+;+;:++''+'#+#++++';######++';:+;;;'+++#++''++''+'+;;+;;;:''+';+;;';';;::'''':#+',,+'':;++''+''++'+';'';;#'';:++''''+@@'+#'#
';'++#+;;;';;+++#'##'+'++##:;#;';@+'';;##+'+#+':''':+'++''+++##++#+++#+#++#+:'#;+;;#''++###+##+++##+##+'+';;'++++++#'+,;'''';+';''+';;'++';+';;'';;::;+'':'++::''''+++'':''++'+';+';'#'';;+'+;#:#@@'#;+#
';+#+##'''';;+++#'@++++'+##';#;####+':+##+'+@';;#;+:''+''++;++#+'#''+#+;##+;:';'+'++++'#+'++;+++++#++''++';''+++'+##+;'++++'''';'';';;'++''+'':'+;;::++'':;#+':+''+++++','''+++':+';+#'+;;';;''+'@@':;;'
'#+#++#''''';++++'@#+'+'###;:#;+'###':+##';+#+;;#;+:''#''++'++#++'+#'#'+##''++;#+#'#+++++++;+++##++###+';;'',;++'++'#;+'+++#'++;'''#;;;;''';'+:'+;;:;#;'':'#+'+++:''+++':''++++':+';'#'+;;',;#:#'@#':'+#
'+++#+#'+';''++#'+@#++#+###;;+'+';#+;;++#';'@+;'#;+;;'#';++'+'#+'+'#+;++#'#'++;+;+++'''+;;;';+########++'++;+#++#+#+;;+''+++''';+';#':'+'''''+;'';;;';;;';'+#++'+++'++#';''+++'+;+''+#'';;':''++'@':++++
';++@+#'++;+++'#++@++''+###;';'++'+'+;'+#'+;@#;'+;';;+@'''+:+#++++#+:#+++#+';:,:;++++++';+;'+'##+#####+',:'+;+++'++#+;+'+'++++';'''+'':.''';;+''':';;;''';'+++'+''''++#';'',+++''+''##''';';''#++#+:;#+'
:'+#@+#+'++'+++#+'##+#'+##@;;;+++#';+;;++'+'+#''':'';+#+;''+'#+'+'+:###+++'+#++,+'++''+';#'+++##+++##++;''';#;;+++++'+;'+'+#+;':''';;';,+;:''+';;:;;,;'+'''+#+++;+''++#+;'',+++''+'+##''';''';##'++''@#'
:'+#@+#+'++'+++++'##+#++##@;';::,#++;;:++'+#;+'':;;';;+'''++':;+'+;#+##+'++##+'#:''''++++#'''++####+##+++';',''+#;#'''+++'##+++:''#+'';;';:'+'';;:;':;;+'';+##++++''+:++''':+++;++'+##'+'''++++'+';;+##'
:;++@+#'++''++#++'#+'####@#;;'#;''#+;;:+#'#+';'';;:''''+''+''+''';#####+#+'##;:';+:+''#++#++++##++###++#++';'''++;'+#'++;;;'+#+''''';';'+;''''';;:;+';;;++;'+#+;++''':;+''';;+++++++##'+'''+;#'++#;'+##'
:;++@+#;++;+++#+''###'#####;''#+:;;+;;:'#+###;''+;;''+'+'';''+'':+##'#+####+#'+:+++,++;+++#+#+##########++:';;++,';'++#+''+++''+''''+',';'+:''+'';'++;':++;;'++''++'';;+'''';+++++'+##'+'''+'+'''++##@#'
;;++++#+@''+++#'#;#+#'','##;:;+'''+#;;:#;+###'''';;''''''';++++'+++@##+###+###+;#+++++''+####+++++++++++++;++++'++#+'+++++++'';:'+.+'';'''+.'++'';'+;;;:':':+#+'+++++'++''+';+++'++##+''''''#'''''###@#'
;'++'+#'#;'+#+#'+:+++++;;@#;';;'+'+#;;:#'##+'''';;:+''+''';'+'+''+;###+#######'+##+#+'+'#'##++''''';''''++'#'+#'+;'###'#+'++.`::++,';''':':.''++''''''';+;+'++'#+++++;+'''+';+++''+#+;'+''';#:::#;#++@#'
''++'+#++;++#+#'''+#;+++;'+;';';+'+#;:;+''#';#'';;;'''+'''+'++'#;,,+#+#+##+##+'###'####+++#+++'''''''''''+;+#+#+#+#+#'++#;+:,;;'';+,''++;':,'''+'';''++;+'+''''##++++'#;''+';'+++'+##''+';'#@#+;#'###@#'
''++++#+';+#+++;;++#'++';;+;''+'++'+;:;#''#;++''';;;'''''''+'+':;''#####''####;##++###+#+++++'''''''''''++++#+++###++'+++'#;+;';'+':''+++;;';'++';;'++';+''';'+##+++++#''++':'+++'+##+'''''#+;#'++#+#@#'
'''+++#+''##++',+++'+'+@';';+''''#'+:::''+;'#+';';:';''''+++'''#'+#+#+#;;'#+++':'##++##'#++++';''''''';''+;';:++++#+''#+;:,;:;;;+++;;'+++;'+;';+';;.;+''+''+';###+++++++'++';'+'+'++#+'+''';#:+#;###'##'
+';'++##';##++':+++'++'#''';+;+'+@+;::;++'';@';;';'';#+''+++;++#'+####;;;++;#+'';#+;;#+++#+++;;''''''';;+'+;++##'####';'+'';'';;++++;''+';'':';'';:`,++'+'++++####++++++'++':'''+'#++;'+''+,@:;#'#####;'
##+'''+#';+#+++;;'+'#++#+';'';''+#+;:;;#;#''#'';;';;;#+';+''+''#+###+'+'+;;+'+#+##+++;#+##++';''''';'';;'+'+'++#+'#'++++++;`,'':''+;+''+';';,'''';:,:++'++'+';+###++++++'+'''''+++#++''+'';+@;++++##+'#'
'++##+';''+#+;:;++''###;#''''#+'#'+;:;;''#''@'';:'':'#'''++'+;+++##''#+'##'#''+#'#''+'+++++'';'''''''';''''+'+;##++'+#;+++;:;++:''+''''+';;:;+';+;:,.,'+'+'+:'####++++'+'++''''+++#+':'+'';@#+#;++#+#@#'
'#;+++###;'';#:++#:+###+#''''@'';'+':;;##+;'#'';'+';'#++++;'++#'###;+'####'#'+###+#+#+++#++'';''''''''';'+++##''+++''++'++'+'++;+'+''+'+';::'+';';;:,:;+'+''++'###++++'+++'+''+#++#+'''+''+@#;#'++++#@#'
++;'#@+#+'#++'''#+':;+###'':+#''';+':'+++#''''';'#+'''+'+:++'##''',;######+++##+#####+++++''''''';;;'';;''++'#''+';::'#++''+''+;+'+'';#'';;:'+'';';;''''++''#+'+##+'++'+++'+''+++++';+'+''##+#++++++##+'
++''@#+@+;'''+##++;#;;+##'''';++''++:''''#''+'++;#';'+++;+';:#';;,''''#'####+####+++###+++';;'''';'''';;;'''''++'++#+@'+#+;::;+;+'''''++';;:'+'';';;''''++';#'++##+'+++#++''''++++';'#'+''#+;#;+++#++#+'
++;+@#+#+;''+#+##+;##+'#+#;+''+'+'++;''@;;'''''+'+'''+';';'';''+#''+#@+;'#++###########+'''';''''';''';;;'''''++#''###++'.'+'+';++''+;++;';;'++';;';''''++';#++'##+,`,'+'++'''+++++;+#''''#++#'++++++#''
+''+@###+;;+#:+#+#''##;+#+'';'+++:++';;@';''+++''++''+;,+'+;+++''#'++@##+#'++#+#####+#++++';'''''';''';;;'+++'''+''''+++:++#':';';;;+++''':''''';:';+'''++++#;+'##+....:;+++'+++++++#+''''#'#++'#';'+#''
'';#@##'+'###:'@+#+#+++;;;+';++++;'+;;+@+'''+:'+';;++;;+''+:++''+#+'+@@#++##;+#+######+++';;''''''''''''''+++++#+''';,#+++##::;:#+;+'+'++':+''''';';''''+,++#'#++#,..,+++;++'+###+++#+''';#'#;+;+##+;'''
'+;@+##''###;''+###@+++''''+++++';'+';+#'''''+++'';+'+++++'+++''+#+#+;+#####'+##++++#+#++'';;'''''''''''''++'+;'+'+#+'.'#+';,,;:;;+;'+++'+''+''+;+';''+'#+++#+;+''..:+++++;''+###+++++''';+#+'+#####;:''
':;@'@+;####,'''#+#@@+;+''+''+##+;;#''++;''+:;;#'+:'+'+#++'+++++#'+'#:;'+#;'''##+###+##'+'';''';'';';''''''''+'+''#@+#'::#:'''+'+:'';'''+++++;'++';;''+'##+##;'+',,,:++'+'+;'+##+++''+''';+#++#@###+#;''
+;;'+#'+@:+#:#'+###@#++';++'++##+;'+''#@''''+'#+++:+''+#+'+'#+'++#++##:;'+#''+#'###+#+#''''''';'''''''''''++++++#+##+#;#;''++'+;##+;;;'++++'+:'''+;;''++##+@#;;'';::'++'++++;+##'+#'#+''''#+'++##+#@@'''
+''++++@##;+;#;##@#'#++#;''+#+##';;#:;##+'':'+#'+:+;'+##+#+'#++'+#+++;::#+##+'##+#####++';;'''';';';;''''''''++#+'#+#++#+'''';+'#+##+:;++'+:+:++'';;''++##'@#+''+;:;+++'+++'+;#++++++'''+'++'+#####@@+'+
+'''+'#+##';..:#'#'@#+'++#''++#@'';++;#++'++:'+:;#'''+##++#'#++#+#+##+#;#++##'#@+++##+#+';;;;'''''''''+';+'++++##+++#'';;'++#++'++#++++:+++:+;'+'';;'+++##+#'';+';:+#++++++++'#+++#+''''+'+'++###++##+'+
++';;##';+''',..;'@@+#';###'+##@''''+;#'+':''+'+##''++##+;;:::;';'#''';;;+##@+'#@##+##++';;'''';;';;''+;''++''+++#+#+'+,++;+;;''+';'+'++;:''+'''+';'++'+##'##'++;;;#+'+'++++++++++++'''++'''++###++'@+++
+++;+@,+;'''+',:,#@###';#+'+'#@#''''';+++'+'++;#+#''+++::,;+++#+''+##+;+'#++###'@####+++';';;;;;''';';;'';'+++++##+'+#++++;'++'++++'#''#+';+''''+'';'+;+#++#++##';+;+'++#+++++'+'#+#;''+++#'+####++;@+++
++'+@+'+;''+##:::+##@+'+#''+'#@+'+'+';'++;+';'#+;#''+#:++'+'#+'++####+:###+#+;#+##@+##+'';;';;;;;';';';;;';';;+'+#'###'#+++'+#+'++#+++;#++'+'''++'';;+++#+#@++#:':'+#'+++++++++++++#'''+'++++##+##+;#+++
+''@#+'+;+++##':'++#@':#+'++'+##'+;+';;+;#@'+'++'#'++;'#''#+#+#'#';;,,;+++#+#+######+++'';;'';;';;;;'''';;'''''++++'++'@+##;'##;++@++;'++++++'++'';;;+++#+##'''''++#+'++;+++++#'#++##'++'+;'++#++##;+'++
+'#+'+'#;+++##'';:###''#;+#''+'+'''''''+++;''++++#'+'+##;'#++##+'####++'+++;+##@######+'';;;';;;;;;''';'';'''''''#+++';;+##''#+;++#++:++'+++''+'''';;+++#+##'':'';+++'++++++++#+#'+##+'+++''+##++#@';'++
;##'++'#'++##''#;';#''##'#+#'+;+'++';;+'#+''#'+#+#':#++#'+#++@+####@#+#####'#'+##@###++';;;;''''';';'''';;''+''''+##+#';'#;''#';++##:'++''++'++'''';:'''#+##+;#'#'+'+;'++++++++#+'+###+++'::++##++#'''++
##+'+#;#;#+##++#;+#+':#+'++#+'+'''#'''+'#+++;'++++:####+'++++++##@+####+'#+##+#@+###++'';;;;'''';;;';''';';'''''''##'#;##;.'++';##@#:#++'+'++'+'+''';'''#+#'+'#;#'+++:'+'++++++#':#####++;,,:#####@+;'+'
#++''#;#'#+#+'++#;'#'+@+';'##;++''+'''++++'#.++++;++'###'#+++#@+@'+'##+#+'+##+++##+'''';;;''';;';;;';;''';;'+'''+#'+'#'+#:;#'#+'###;++'++'+#+++'++';;'''#+#:':'##'++;:;++++++++#+'####+++,,,,,#+'+#''+';
#+'''#'#'##+#;+##''#'+@+'+++#'+''+'''''#+++;#+#''+##++#++#++#+'+#+####@##+##'++###+++'';;;;';;;;;;;;;+';';;;;''++###+####;+#++#'##;;;:;:,++#'+''''+;;'';++#,'+;##'#+':;++++'++++#++##++#''::::###+;'@+;;
++#''@'#+##+@;+###+#'#'+'#;+#'++;++''''++'++#+#+'+#+###+++':+#+++@#@@###'++###+###+++'';;;;';;'';;;:;;''';;;';'+'+#++####;##++#;+'''''+';::+:++;''+';+;'+++:+++;#+#++;;++++'+'+##'+##++++';;:+###@++@+;'
#+#;'@+####'#;+#+#''+@#:'#'+#';#:++++'#:+'''##@'#'++###';'+++##++###@##@+#####@+##+''';;;;';;;;';;;;;''';';;';'''##++;+##+##'#+;;;+;'+#+''';:;++;++;'+''++';+;#+;'#++;;++'+'+++###'+#+++'''''####@#+@+;+
#+';'#+####;#'''+#+'++;+'+''#+;+++#'+'#'#'+'+#'+++++##;++++#+@++###@#@##@###'#####+''';';;;;'';;;;;;;'''';;;'+''++#++;#####++#+#'';::';;;';'':;;''+;'+''++''+++;+#+++'''+'+'++;'##'+#+++'+''###;##@##''#
#++;'++####++'+@#++'';++'+'##+'+#++'+''#;'+'+#'#+'+#:+++###++#+++###+'+#@###+#####+''';';;;;''';';';;;'+';;;;;;;''#+++##'#+++++#+@+:;'+++'';:,:;''+:'+''++;+;+###++#++''+++'++;+##'+#+++'+''#''#@@@@#++#
#+#;';'+###+''#@#@;+'+#''+'##+';'+'++#;+++';+#+#+;+;##++++#'::;;;'#####'###'@+';++++';;:;;;;;;;;;;;;;;;''';;'';''''+####+#+#+'+;+:;''+++#####+;:::';'+;'++;;'##++++#+'';++''+:'+####++++'+'';+#@@@@@+'+#
#+#'';'+###@''###@;+:#+''+'#+#'+'+'+'#';#+'+####+;'###+++';++#+++#;;;+##++###+;#+#++';;;;;;;;;;;;;:;;;;;;;;'';;++'######+#+++':;:++++##+#+#+#+###++;:;;,'+:;###+#@+##'''++''+;+####+++++'+';+#@@##@@+;++
#+#''''+###@+'@#@+'+'+#''#'##@'#'+'#'++++';++#+#+'###+++;##++#++++#+#,####;#++;#'+'+'';;;;';;;;;;;;;;;;;;''''';+''#+#+#+##++';:+++#,'#+'#++'+;;++#####'::,,,'#+;;@'##'+'++++;'+####+++++++'##@####@@#'';
#+#+'''+###@+'@#@;++;'@''+'++#++'+++#'+#+++;+##+'##+##+'+@##'+#@#@@@'':++##++''''+''';;;;;;;;;;;;;';'';';;;;''''';+##'##@'+';+#'#'@''#+++#++';;'++++####+';::'##:#'#'+''++++''+#####++++#++##@##@@#@#';;
###+';'+###@+'###;++';#''#''+##';++'+'+#+';'++#'''+++#'++@+#+###++#@@'+'++#+'''+'';';;;;';';';;;;;;;;''''''''''+''+##+###;;++'+'#+#'+#+#+#+';;''++''::+@###';:'+#+'+'+''++#+'++#'###'+++#++#++@@@@#@+'';
##++'''+####''';.+++''+;'#'++'#';+++#'+:++#''+'#+##++#++++++;;+#@###@##'##+#'';''';'';;;;;';;':;:;;;;';'';;'''''+'++++@#:+;'++';#''::#+++#+'';;'''++++;,+@##+':'#+++'#''++++'++@++'#++++#+#@''@@@@#@+'';
##';'''+#+@@'';'++#+';;''+'+'+#''++++:#+++++##'#+#+;#+#++;++#+##@#@@@##++##++''';'';;;;;;;'''';;;:;:;';;;;';';;'''+'++'';'+++;;;##++###++##++'';::::,,'##+#@##+;+++++#'+++++'++@+#;##'++++##'+@@@##++;''
##++'+'+#'@;;';'++##+;'''+'++++'#+'+'+++##@##'+#+#:'+;;:'#++#@+#@#@@###@###+++;;''';';;';''';';;;;:''''';;;''';'''''+'+;+#+;+##'##;,'+;'+'+#+':::,.,'#+'::+#@##+'+'++#++++#''++@+#;+#'++'+;@'#@@###++'''
+##+'+'+#'@;;'`'+##@+':''+'+'#+'##''##++#+#####':##+;;###+:'+#++';'#+###++++'#'''+''''';'''''';;;;;;;:;;'';;;;''''+'++'++#;#+##;;;'++';'+';#+,...:';+'++:'##+####+;+##+''++''++@+#''##+#++#;'+##+##++''+
+###'+'##'@;;':'+###+;,+'#+#'#++#:+#++++++##++:#'@''#+#@#++#+;'##+#+'###++''++'';'';;';:''';'';;;;;;;;:;;':;;;'''''''+'''#+#'+:..#@##'###+#'',..:':';'#+''@;#++@###++#+''+#''++##;;'##'#'#+'+;#+###''''@
####'''##'@;;'''+#@#':'+'#++'++',#+;+'++'+##'+##+'###+@#'#+++@+#++####'#'++'+''+'';;;;;;;'';;';;''';';';;;;;;;'''';'++'+#+#+,:..;'@#+++'##+#:..,'';';+##''@+#+'+@###'+#''+#''++##':'+#+#+#+;#'+####+'''#
###@'';##'@'';''',;#'+'''#+'++:;##++++'+'+#:##@+'#+++#@###+'#@#####@@###++'+++;;';';;:;;;''''';;;;;;;;';';;::;;'';''++'+:,,++:,+#+'#+#+'#@+',`,;';+#''##+'@++++++###+##''##;'++#++:'+###'#++#'+###+'''+#
##@@;'.##+#'':'''#'''+'''##;+;+###+++++++;'#'#+#'++#+@@###+##@###+##@##++'++++;;''';;;;;';'';';;;;:::;'''';;;;;;'''+++;;'''++:++'''#+++'+'#:..:':+'++'+#++++;+##++###+#''##''++#:';'#+#''##+#++###@#''+#
+###:,:'++#''''++'#;#++;+##'+#++##;++#++;+#+;'#+'+#++';+'+'#+##++'#####@#+'#'+'+++';;::;'';;;+;;;;;;;';'';;;:;;;''+'';'''++++:#;+##++##++'',`,+;##'+''++#++:+##+#+####+'+##''++#+;++++#+'#+++#+#####+++#
;++',::;#+#+'+'+@+#+#'##+#+;#+++#''#+'+#+##'+#@+++######':;:+#+###@#;'#'##'++''++';';;;;'';;'';';;;:';;+'';::::;''+++++''''++';''+#+'+#++':`,+'++++'''''#'@#'++++++###@'+#+'#++:':#+++##;#'+#'+#@#@@++##
';@#:;''#+#+'''+#';':'+#+':##+++#'+'+'#+++#++'##+##+##++##+';#+######+'++##++;+';''''';;;;';''::::;;;;::';::::;''+++++++''''';'++';+'++#':..;#;#:,,+;'''#+@++++#@#+#####'#++#++'';++++##'+##+'#+@#@@++##
#;@#'''+#+#+';++'+'+#''++'#+###+#'++++#+#+'#+;+##+#''''';++#+'++####++++++#+'''''';;;';;;;;;;;;;;::;;'';';;:::;;'''+'''''''''+;+'++##';;#..:++;,;,,;+;;'#+##++'+++++#+###;+##+'+''#+++###+#++'#+@###++#+
#;###'++#+#++'+###++@+':+++####+++++'+@##+#++###+:'###++#+;+#'++##@###'''+##++'''';;:;''';;;;;;;;:;;''';'';:::;::;;'+;;;;'';'+;;''+#+##++,,+;;+'+':;';;;#'+@#++++#+++++###'+#+;+;+#'+##+#'#'+'#+###+++##
;#'##''+#+#++'+##'';@+:+#;+++#++'#+#+++#+';;'#++'####+#+##+#;'+'#####++'''''+';'';;;''';';;;':;;;;;';'';;;;;::;::;;;;;;;';;+#'+'+++#+#+#',::+''+++++',;':;####+'+##++++##@#'+'+':##''+###+';''##++@'++##
'#++#+'+++#+''++@++;''+##'+++###+#+#++#;:;....;++;##++++@#+#++;'+#+##'+''++';';';::;;;;;;;;::::;;;;:;:':'';;::':;;::';;';'+'';;+'+''##+';,+'#+:#+#++++':,:+###+'+'#++++#####';#';#+''+####'#'##+++'+++##
''#+##++++#+'+++@##'+'#'+++++###+#+#++++++'':.,+';#++'+++;;+'+';+####''++'''''';;;;::::;;';;::::::::;;;;;'';;:;'';;;;;';'++:'+'+++'''#';;;''#+'####++#+#+;::###';##'+#+++###+++''#+''#####+@@##+++;;++##
';####++''#++'++'++''++'';,++###+#++'+#+##'++',;;;';''';;''';+##''###+''''''''';;;:::;:::::;::::::';,;;;;;;:;:;'';;':';';+:';'';#'''''#;;'+#++'+####+#+@'+;+;'#''#+++#+#'+###+''+#++'######'#+#++##;'+#+
+'+@###+''##+'++'#';+#++##;'+###++;#+##++#'+##:.;++++'+'##+#+'+;+'##+''+''';;'';;;;:;;:;;;::;;;;::;::::;;;;::;;:;'+;'';;';'''';'#';;+++';;+##+;+####+#+@+'+:++:''++++###++####+;'@++'##+#+#+@+#++';;'+#+
+'+@@##+'+##+'#'+#+'##++##+:+####+#+####+#'+,;#,,''+++''#++##+++;''++'+++''+''';;:::;;::;;:;;;:::,:::;:';';:;:;::;';;;;;:';'+';'#;,:'#':''++++;+####+#+@+'#+:'##+#+'#####++###+';@#+'#++#+#++';'####'+#'
#'+@@#++'++##++;##++'#+#+##++###'#++##+###''####::'++'++##+##+'+#''#'+'''+'+''''':::';::;::;;;:;::::::;;;;:;';';:::;:;;;;;;;+;+;#;;;;:''#+++#+'+##+#'##@+'##';'''++'#+###++####+:@++'#++####'+@@+@+++++'
+'+@@#+++++####;+#+#+####+@#'+#+#####+###'####@#':++'++#'#'+#+:#@+'''''''''''''';::+'';;;;;;';;';:::::;;;::;:;';;;';::;;;';'+;;+#;;;;''+;'++##+'+###++;#+'##;';''+#+#'###+++#####'+++#+'+#+#+#+@+##@'+';
@+'@@#++'++###++#+##+########'#+#####+#+;##+#####;'+'+###+###+:+@+#;;';''''''';;:::;;;;;;:;':';;;':,::;:;;;:::;;;;''';;;'';'+;+;#;;;'+:''',,+#########;#'+##;':;''+@#'###++'+###+''#+#+++##+#++@+##@++';
@+'@@#++'++##+;+#'##+########++###+###+;###+#@@##+'''+##+;'+#':#@+'#';'''''';;';:::;;+;:;;;;;::::::,::;:;;::,:';':;;;;:'''''+;''+;;;'''';++::+##+'++##++'+##'+#:''#@#'+##++'+#+#++'####+'#@##++@##@@;+';
+#'@@#++'+++#'####'#+######+##+##++#++;###+:####+';'+@#'++#++;++@'++#;';';'''++;:;;;:;;;;;;'':::::::::':;;;:::;';::;';;';'''+;''+;'';;+';;+;;;#+++'+##++++##;;#+:+#@@'+##++#+#+#########+@#+#######@'+''
@''@@#++'';++''++##;+####+##@####+###;#@##'+###+''#'++'+@+##++###+''++';';+'';;;;;;:;;';;;;'';::::::;:;'';;:;:;':::;';:;;;;;+;;++''';;''':+;';;##+'+##;+++##';+#;:;@#+'#+++#'++##+'######@++##+####+'+''
+#''';;;;''';;++''##+##+#+##@##'#+##'##'+#'#@##+#+'+#+'++'+#':++++'''++''''';;;;;;';'''';;;';::,::::;;:'''':,:;::;';'';;;'';+''++''';'+;'++'++;;##'+##++++####'#+;:@++'#+++#'+####'####@###;+#+#####'+''
'#;+########+++',:;'###+++##@######+###''#'####+#+#+'###'++#;;++'+'''''''''''::::;;::;'';';;;;;:;;;';'''';';::::::';'+;'+'';+''+';;;;'+';#+#+++;'#'+##'++++'+###++';+''+++++;+#+##+##+##''''###+##'#;+''
:+####+#####+'###;,:###+++######+@#####+;+'+###++++#'+#'#'#+++++''';';';'';;;:::::';;';';';'':;;;;;;::;;;:;::;;;:,;;'':''++'';;'';';;'+'+:++++++;+'++#'++++'''''++'''''++###;++++####+##@+''+##+#++#;+''
;:++####++###'@###+,'##+++########+####+'''+#+++';+;'+#+++;+'+''+''';;;;;;;;;::::::'';''++';'::;;'':::'';:::,:::::;''':'''';+''''+';;+++';+++';''''++#'#+++;''@'++++''++####;++++##+#+#+@'';'+##'+##'+';
@#:+#####+##########:'++++##@+#########++''+++'+#++##++'++++'+'++';'';;;;;;';:;:::::::;:;;;;';:;''::::''';;:,,,:;';;+;:;;;;;';+'+'',+'+;#+++#'''+;+++#;+'++++@+'++++'+++###+;++#++#+#+++@;#'++##+@'+'+';
###;++##############++++###+@++###++##++++'++#+'#++++'###:+;''''';;;;:;;::;;;;;;;::::;::::::::::;'::::;:;;;:,,::':'';;;;;;;:+;+'';+'++#'##+++'+'+++++#;+''#'+++'++++'+++###+:+++++####++#++';#####'+'+''
####+#+#########@++##''##+#######+#+##+#++''#++'++++#+#@##';'';;;;''':;::;;;:;::;;::';;;:;;;:::::;::::';;;;:::;;:;;;;;;;;'':+;+';'+;';'+'##++'+''+''+#++#;#+@+@'++#+++++###;;'++++####+;;#+''+###+'#'+''
+#####++#######+#+@###'##+#@#+######';;::;';;++'++++#####+;+;'';';';;;;::;;;::::::;;;;;:;;:::::::::::;;;;;:;;;::::'+'';':::;+:+;:::'+#++;;@#+'+'#+'''+'+#'##+'#;+##++++++##:''++#++###+';'+#'++##++#'+'+
+####+#++######+#+#####+#'+@#+####'+;;;;;;;'';+':'''+#++#'++';;;;';;;;'';;;;::;:::;;;;;:::,:;:::;;:::::;;'::;:;,,:;;'''';::;+;';+#''+'++#++#++''+++'+'++#'#+###'+#@++#+++##:''+##++#+#++'++''#####+#'+'+
+#######++#######++##@#+;'###++#;:;:'###+#''''+'++#+#++#@+;+';';;;';;;;;;;;;::;:::;';':::';::::::;:';;;;';;:;::,,:::::;';';:+:''+++#+#+'#++#+++''+''''++#'##;@+;+@@@+#++++#:''+#+++#'#+++'''@+#+##+#'+++
++####+###+@#####+++#@##++####+'+;###+++##+''#++;++'#+#+#';:';;''':;;:;;;;:::;::::;''';;;;:::::::::'';;;'';;:::,::::;'''''';;+;+;'+++##++'+###+'++;'+'++#++''#;'+@##++++++#;+'##+#+#+#+''+'@#+#+##+#+++#
+'####+@##+@+##+#########'###+''###++++###+:+++++:+'#####;';;;';;;;:;:;;;;;:::::;;;';;;'';:;:::::::::'+'''';:::::::'+'''';';+';;'+'#'##'#++##++'++;';'++#+++#+#'#@###+#++##'++####+##@++''@+++++####+#+#
;+####'@#@#''#;###+';'''+#'#;;#@#+@+#++#+#+#''++''#'+####+';;;;;'';;;::':;:::;:;:;;'';;''+';;::';;;''+'+'+'';:::::;;'';';+:+;';:+++++##'+#+'##++#+;++'+++++#@##'@@+#@+#+++#+++#@#@++'##+'@'+#+++######++
'#@###+@#@#+;:;'+##@####''#;+####+#++++#'#+'''++'++'++#+++';;;;;;;;;::;;::::::::;';;''';'';'::;''''''''''+'';::::::';;;;';';;+';';;++#+'+'#'+#++#';+#'#'++++@++'@@'+#+++++#+++#@###+'##+@#'##@++###+##+#
'+@###+##++++##@@@@@@@@@@@+;;''+++#####+'#+####':;';;+++'+++;;;;;;::::;;:::::::;;'''';;'+;';;:::;'';;;;;::':'::::;;':';';;;:;+;;'';;'#+'+++#++#++';+#'++'+++##+'@@##+#+#++#+###@####'+++@+''+#++##++####
'+#@###+++####@@####+#@#@@@@+;++++###'#++++'++;;##;:++++''+';;;;';:::;::;;;:;:;;;;';';'';'''';:;;:;'++'';:;:::::;;'';;'';;:;'#:'++';'+'+++'#+'++#';+#''+'++##++'#####++#'+#+##@@#+##'+++#++'+#@##+++####
++#+##++#####+######+@@#+@#####''+###+'++++';:+'++++'+#''''+'';;;;::;;::;;:';;:;'';';;';'''';;:':::;''';;;::::::';;;+;;''::;;#;'+'++#++'++++#+#++';+#+;#';+#+++'##++##+##'#+#+@+#+##+;+#+##+'####+++####
#####'+@#@@@#++########'@######@#+;'#+++'#+''++'#'++#''+''''#';;;;::::::;';';;:;'+';;;;;''''':;::::::::;;;;;;::;'';'';'''';+;#;+';+'+#';''+'+##+#+;++';';++@;##'###+#++##;+++###@####'+#'+++'#'#+++++###
##''#+@###@@#+##@##@#+#@######+#@##+;#++'++++++'+'+++#:#'+#''';:;;:::;:::;''';:;;;;;;,::;'++';::::::,::';;;::'::;;;'';';;::;;+;#';++;'+++:#'+'#'++;+:#+'';'#'#+''+'+#++++;+#+@##@###+++++#+''#'++++++@##
##@##@####@@#+@@@##@#@#+#####@#+#+#@#+'+'+++#+'+''+++'+'++#+';;::::::;;;;;;;:::';;;;:':;;;;';;::::,::,;;';;;:;';;;:';'';;:::;+;#'';;##+;'+;'+'+'##''#'#';:;;''+'#++++#+';;++'@##@#+#++'##++#'+'++++++@##
@@'#@###@#@@#+@#@##@##########'+#++####;;;'+#'++'''#+''''+++'''';':::;;:;;;;;;:;''''':'';;;::;:;;::::::''';;;;;;'';''+';;;:::+'+#''#+++++'''+';'##;+#'++'+,::'''#+;;:'#+';++###@@'+#++'###@@+''++#+++@##
#;@@#+##@#@@##@#@####@#####+@#++#++#@@'+''+''''''+'##+++;+++++'';;;::;;;:;';';;;';:;'';';;:::';';::;:;';'+;:'';:;;';;'';;;;::'##+;'+++'+#'+#';::;;:'';'+'#',:;;+#+'';'@++;+'@##@#++#+++#@##++'''##+++@#@
+@@#@###@####+@####@@##@####@##+#++#@'@@'#++@##''+'+++'+''';+''';;;:;;:'::;'';;;''':;';;::;';';;:::;:;;'++;;;;;;;;;;:;::;:::;#'#''+'+'+++++''+;++++;,'#;'+#',;;+++'''#@#+'++@##@#+##+#+#@##++'''#++''@@#
@@++@####@+#++#+#####+##++####++###+#+#++#+##'+#+'++#+'''';++''';'';:;:;:::;'''';:;;';;;:::';;;;:;;;:;;;';;;::::::';;;::::;'++'#';++'''##+++#+'#+++++',':+##,:;+++''+#@#+''######+####++#####'+'#';;'@@+
@#++#####@+####+##@@#####++##+++++'#+++#++++@#+##+;#+++'';';'';'++';;;;;::::;';;;;';'';;;::::;:::;'';;;';'''::::;;;;::::;;;';''#'''''''+++++++'+#+++#'#;,,+##::;++''+#@@+++####+#@#####+##@+#';'#';;'@@#
#@++@###@@##+#@####@###@#+##+###'###'+#++';;;'+'++''++++';;;;;;'+';';;;:;';';''''+';';'';;;;;+'';''+'''+';'';::;:;;;;;::::';;;'++'';;''''+'+#++'++'+#'@++';#@:::'+'++##@''+@#####@#+###++####';'#';;+@@#
@@##@###@@@@######@@@##@####+++'#+##'+'''##+++:+''#;;++;;;;;;;;;;;'';;;''';'''''''''';;;;;'';;''''''+'+#+;'+;::;;;;;;;;:::;;'';'+'+;#+#'#''+#'+@++'#'#@@#'';++:;'++++###+'#@###++##+###++@###';;#+;;#@##
@##@####@#@@###@#@#@####+###+++@###++##+#++;'#++:;++;;+';;;''';;''';;;'';;;'';'++'''';;;;;';';'';'++'''+':;;::;''';;';;;::;:''+'+++;'+''+'''+'++##'#+#@++++;'+:;'+++####+########+#+###'+@+##+;;#+;;#@##
@@#@####@#@##@@@@@#####@+###+#@'+#+'@#'+#++'+#@+++''';'';;;;;''''''';;;::::'''+;;''';'';'';'+''''+';;;'''';:;:'''';;;;;;;;':;'+'#+;;''+'''#+#+#+#+'##'@+++++::;;:++++###+########'@'#@@+#@####''++''#@##
@#######@#@#@@#@@###@###+###+#+;##+#+#+@#+++'+#'+++;;+;;;;:'''+'''';;:;;:';';;'':;;++';'+;:;;++';;;';;;;+;;;;'';;;:';::;::;;'+''+'';;;;'+'#+#'+'#+'#''##'+++'+;;++++####++#####+#'@'+#@##@+#@#'+++;##@+#
#####+##@#@####@@@##@###+@@##@##@##+##+@#+'#'#@''';''';;;;;;';'';;;;::;:::'''''';;;;;';'';:;';;;;;;;:;;;';;;:::;';;+;;::::::;+'+++;'''''''+;#++#++'#++##'+++,:+#+'''+###++######++#'+#@###+##@+#++'@@@'#
#####+###@@@######@#@@##+@+####+@#++##@#+##'+@#';'''';;+';;;;'+;;';;;:;:::'''''';;;;;;;;;;;;;;:;;::;;;;;;:::::::;'';';;:;:;:;;;';;;;':'''++''+#++++++'##';'';##';;;;;'#+####@@@@@##++#@###+@+###+++@@@'#
##++#+#+#@@@'#@@###+##@##+#####+@++++#+'###+@##+#';;++'''';;'''';''';;;:::'''';'';';;;;';;;;;;;;;::;;;;;;';;::::';'';:;;;:::;;;;:;';'''#+'++:#+''::::;'';':'''''+++++#+++###@##;@@@++@@+##@+#+##+++@@@+#
#####+#@#@#+:++######+@##+@#+++++#++##'++##'+###+';;;'+'';;;;;;;'';';;::::;'';';';''';;';'';:;;;;:::;''';'';::;;;;::;;;:;:;;;'+'';''''#+'+'#'++,::;;;';::,'++##+++#####++##@@##@@#@++#@@++'+++##+#+#@@+#
#+@##+#@#@###;+++####+'######;'#+#++#+:+@+#''+#++';;;''+;''';'''';';;;;:;;:;';;::;;;;';'':::::;;;:;;''';'+'''''''';';'::;''+;'+'';'''''';+'#+':.:;+#++'::'#+#+;+';######+#@@##@@##@+#@'@+#''++##'#+#@@##
#+@##+#@@@@@#@;:'+####+###@+#'#++#++#+'##+#''++'++';;;+'''+++';;';';+;;';;:;+;;;:';;;';;;::::;;;::;;;;';'+''+''';+';;'';;:;;;''++'''';'';''++:.'++##+':;++#'#';;;';###'####@#@@@###+#@''+@'+#+##'#+#@@##
###+#+@@##@##@#';+##++#+##@##+##+#++#+#+#+#'++''''''';+++';;';;;'';;;'';;';;;;;;;;;''';;;;::::;;;;;;;;;''#++++'''';;;;;';;;;;;;;;+;;+'''+;;+:,''+'++,''+##+##;;;';+###;+###@#@@###++#@@++@'@@###+###@@+#
###+#+@#@@#+@@#@''##+##+###+###@+#+##'#''@#''#+;;;;''##';;;;;+'';;;;;:;;;;'''''';;++';:;;;:::::;;;;';;;''++'''';;'::;;';::::;+';;;;;++'''+'+;:+++':;+'+###+##++;+'++#@+#@##;+#####@+@###+#+#+###+###@#+#
##++#+@@@@#+@@@@+;'+##@+#@#+@###+#+##'+'+##++#+';'#'#+':;'#';++';;;:;;:;:'';;'+''+''';::;;:;;;:;::;';''''+'';;;;;;:::;';;;;;;+'+;;;'++'++++;'++@';+#;++###'##+++'';+++;#':'++##+#+#+@#@++##+'###+###@+##
##+##+@@@@#+@@@@@::###+++@@#@@##+#+##+++#+#''@''#++#;;'+'''+'+';;;;:;:::;;:';';#'+'';;;;';:;+:;:::;;';:+';;'::;'';:::;;';::;;;;'''''+'#;';'';++'+##;#@+++++#+##+;+';#::;+##+++#+###+##@#++#@@@##+###@###
#@++++##@@#+##@@@+'####+@#@@@@##+#+#+#+##+#''#'''#++';;;'++''';';;;;;:::;;';;';+';';;;;;';;;';;;;;;''';';;;::;';';:::;;';;::::;'';;++#;;'+++'++;##;++#'++#+#@+##'';:'+###++'''+####+##@#'+#@@@##+###@#+#
@##+@+#@@@##@##@@#:+####@@@#########+#'''';';+'##;';;;;;;++;;;'';::::::::';';''';;';';;;;;':;;;';;;:;+;;;;;::'''+;:::;:;;::::;++;';;+;;;';;+:';'+;#;;;+'+@+##'+::;;;;;;;;::::;;'###+##@#'+#@##@#+###@@#@
#@##@+#@@@+@@##@@#+'+#@#@@##+###+###';;''#+'++##;';;;''';''';+'';;;;;::;:':;';+;;';;''';;'':;;''''';:;;;;;'';''++;:;:;;;::::;:;+';;+#+'';;;++''+:#+##'####'',:;:'##############+'##+##@+++#@@#@#++##@@#+
##@###+@@##@@@@@#+#:#@@@@###+#+;;'+###'++#+++##;;;;;'++;;'+'++#+;;+';;::''''';:'''';''''''+:'''''';;::::;';;;'';:';::;;:::::::;;;;'+++';:++'::#:#####++#+:,;+;+#++#+@@#####@#####'+##@#+#+#@##@##+#@@@#+
#@#@###@@@+@@@@@#'#'@+@@@+#+@+'##@@@##'+''''##''''+;++;;';''''+';;;;';;:;'+'+;;'';;;;+'+''+:''''';;';;';;''';'';:;'::;;:::;:::''+;#;';';;;'''+:##'#+#+',;###;######'@+++##+@#+@##@'##@#+@+#@#####+#@@@#+
+@@@##@@@@#@##@@+@###+###++#@@+;:#@#+#+'''+###';;;';;';:;;''';+;;;;;;;:;;;++;;'';;;''+''++'';'''''''''''''+;'+'';;':;::;::::::;+';;'''+,+'++::+###'#':'###+;###@+###@'+'+@+@#'@@###+#@@##+#@@####+#@@#+@
+@@@##@@#@#@##@@#@@#;@'++###++'';+##+#''+'##+++;;'';;;;:;:;';;';;;;;';:;:'++++'':;;''''''++'';++'''+';+'+'+';++;::';::::;:::::;;;''+';;+;#+:,++'++#';#+'';'@#++@+#+#@+##'#+@+####@+##@#####@#####+#@##+@
#@####@##@+@#@@@#@@+++@''#+'###@+###+#'+'++'''+';';;;;;;';'''';;:;;;';';;;'''''';;''+'+';''''+'''+'+''+++'+'#'+';:'';'+;;;:;;;::;'::;''+++','';+'':++;;;:+#@##+'+#+@@++@'#+@'@##@######@##@@#@@##'###++#
######@#@@+###@@###+#'+'#++@@'#@####'#'''+''''++';+;;;;;';;;;;;::;;:;';';;;;''';'';''+#'+''+;''+';+''+++''#++'';;:;;'';'':::;;':';:;';':'','';''';#;:;,'+#+@+##+#####++++++@'#+#@##+###'###@##@##'##+++#
'#####@#@@+##@@@#####;+#++@#++@@####'##'+#';''''+#+;;'''';;::;;;;;'':;;';'';;;;'+''''';'++'''+;''';':++'++++'++';::::;;;';:::;;;;;:;'';;':;+;;';''::,,+#++#@++###+@#@+++'++@####@##+###++#@@+#@#+'####+#
+#'+#@@@##+##@@@@@@#+'#'+#@+'+#@####+##++'''';;;;;;;;;'++';;;;::'';;'';;':';';;;';;':;;'+'+''';;;''+;''''''+'+;;::::;;'+':;;;;';;;;;;;:+':#;;';+:,,,,#@@###@+@###+##@+#++++#@##+#@#+####+##@++##+'######
#@#+#@@@######@@@#@##+'##@++#######+@@##++'';'';';';;;'++';;;;:;';';';''+'''''''';';:::''#';;';';''+;'++''#+'+;;:;;;;''''';;;+;;'';:;,+':+;;;'':,,,:++#@@##@#@######@+#+++'#@####@#+#@+####@#'+#+'+#@@##
@@##@@@@@@@##+##@###@'+#@@##+@#@#@#+####+#+''';';;;';;;;'';;;::;;;';'''++''';;';;';:::::;:;;';'';''';'+';''+';';::;;;:'';''+'''+';;;;+;;;';;;;+,,,;++'#@'#+@#@##+###@+#++#'###+##@#++@+####++++#+++#@@@;
#@++#@#@@#@###+###@###'+@@@++##@#@##+'##';''''';;;;;+;;;';;;;::;;;:';;;;''+'';;;;;;;:;;:;:;;;;:;'+';'';;';'+;''';::;:;;;;;+'++++''';';;+#;''';;::;+++'##+##@@##+####@+#++#'###+##@@####+####+++#+#+#@@@:
###+@@#@#@#'##+#++@##+++#@@@########+'#';'''+';'''';''';+:;;;:::;;;;;;'''''''';;;::;:'';;;;:;:;'''++'''';';+;+;;;:;':;;;;;;';+';'+;;#;,+;;+';+::;++++'###@#@@+#+#@##@+#+++;+#++##@@@@##+####+++#+#+@@#@:
+@#+#@++'+#@###;#+';'';+#@@@######@#+##+'';++;';;'+;';;'';;:;:;;;;;;:;'';';''';:;:;';';'';;;::;''''+;+''''''';';;;;';:;;'''''''''''#';#+';+';+::'++#+'###@#@@+#'###@@##@+#;+#+++##@@@+#++####''#+#+@##+;
+#'+'''@@@@#++##''##';####@#@#+####++#+;';''++;;;;;'''';+;::::;:;+'::;''+'';;+':';;;'';;;;;;;:';+'#+''';'+'';'+;;';'';;;'''';;''+''';;#''';;';:'+++#+##++###@###########+#'+#+++##@@@+#++#########+@##;;
''#####+''++'''+##+@@@#''++#@######++#+'';'++;;';;;;'';''';;;::;;;:;;'++''';''''';;;''';;;,;:;;;++##''+'+++';';;'+'''';'';:;;'+'+'+';+'+;'';#,';+++#++@#+###@@'###@####+'+'+#++#@##+'+##+####@###+#@#+;'
#@@####@@@##';;'''+'@####+;:#@########''''';'#';;;;'';;'+'';;:;:;;;;;'+';';;;';';';+;+;;;:::::;;+;''''''''+''';;''';::;;'';;;''''+'++++'''';';:;''#@#+@'###+#@+++#@####@##'+#++##';;''##+#@####@###@##;+
@@#@+@@@@#@@#@#+;:;'+##+@##'+##+'@#+#'';'';''+';;;;;;;;'''';:;;;:::;:''''';';;;;'+'''+';;::::;;;;;;:::;''++'++'++;;;';;:''';;;'';'';#++'++'+;'''''#@##@+###@#@@#+#######+#'++#+@++#'''+#######+@#+#@#+'+
##+'+#@@#######@#+;:#+##@#+@+#@##@#+#';'+;;;;';';;;;;;;;'+';';;;::::':;;;+';;;;;++';+';+';;;;;;:;;;;:';;;;+'+''''';;;;;;+''+''''+';+++'''+'+++'#++####@##+####@@+########++++#+####+++++#+#####@#####@'#
#@@#@@++#####@@@@##''#####@###@#@@###;;'';;;;;;;';;;;;;''';''';::'';;''';''+'''+++';;'++';;:;''':;;::::;;'''''''';;';;;''+':''+;'+;+++''''''++++;'####@+#+@+@+@@+#+####@#++++#+#####++++#+##@##@####+#'#
@@+@##+#+######@+###'++##@+###@##@##++'''';';;;+''';';+;''':';+;;';+'++'+'';'+''+++''+';;:::;;;'::;:::'+'';''++'++;'';;+#+''+'';'++'+'''''#'';+'''####@###@'##+@##+@###+##+++#+#####+++###+####@####+++@
#+@+##'+##@#@+@@+##@+'+#@@#+###@'##@+''''';;'';''';;;;;';''::;;;;''+;''+'''''''#++'+#'';;:;;;';';::::;''#''+++''';+'++;+'''''+'';'';''''+;+;;;+'++#@###+###+#@#@@###@+#@#++++#+#@####++#####@##@#####++@
+'++##+#+###@@@@@####'++##+###+@@@#@'#'''';'++#+'+++';'''+';';;;;''+'''';;;''+'+'+++'++'';::;''''+';;''+#;;++#''';';++''';'+';'+;;;;;;;''+';;'''+'#+#+#++@#'+@+#@####+#@@#++###+@##+#++#####@@####@##++@
'##+;++###+#@@@##+@@@#+#+#####+@@@##'+''''##';''''';;+;;''+;;;;;+';''++++;'';#'+'+#+'+';';;;''++'+''+'+'+'''++''';'##+;'''+';;;'';;;;;;';+';;''+;''+###++@##+@+#@@@#@###@@++#+##@##+##++#+#@#@#+##@##'##
#+;'##++@###@@@####@########+###@#@#+++##+'''''';'';;;';''''+;;+';:'''''+;''+'+'''+'++''''''''+''+#++#+++++'++++;;''+';;';''';;;';+;:;;'+'+;;'++++###+#'+@#++@#+#+@@@#+@@@++#+#@@#####++###@@@####@#@'##
##+';+##+###@@###++@@@#+##+#+#@#@#@++'+##;;''';+;'+;''''''''''';;'';';'''''';;'';''';'+'''+'++'#++###++++++;+#'''''';'''';;';;;'+;''';;;''';''+#'+@#++#+#@#++@++@##@@#'##@++##+@#####@++###@#@@##@@#@'#+
+@##+;'+#;##@@###++#@@+##+####@#@#@++'##;''''''';;''''''''''+++;:;;;;;''''''''+';';++++++''''++++'#+';+++#+;++';;;;;';;;';;:;';;';;'';;+;+;'+'+';'#'#+@@#@#'+#+++@###@@#@#++##@@#####@#+#++##@@######'##
#####@+;'#'#@@#+++###+###+#+#@@#@#@'#+#+''';'''';''++;'++''+''+;;:;;;;''''''''++;++'+''''+'+++;''''++''+#++;+++;;';''';';;';;;''';+'';;'''''+++'''#''+@'@@#''##+#@@##@+##+#+##@##@#@#@##+####@@@#####'@#
#@####+@''#'@@##+'+######+++#@#@#@#''@#''''''+''''#++++++++''#'';;;;;;;;';'''''#'#''++;''++'+'';;+''+;'++'#:+#'''';;;''';;;;;;+'''+'';'++++;+''''+@++'@;@@#''+#+#@@++@#####+#+@+#####@##+####@@@#####+@#
#####@++#@'#'@##+'#######+'+###++@++@##++';;;''''''++#++'++''#+';;';:;;;';''''++++++#+'''++'';:+''#;;';;''+''+'''';;'''';;;:';;';';';:'++++'+#;+'#+++'@#@#@+'+'##@@#+@@+######@+########+##@##@@####++@#
##++##@###@#;'###++######+#+++#++@+##'#+''';;''''''+++++'+'+'+';';'';'';';''+'++++;+'+';''';;;';;''''''''+';'++'';'+;'';;;;'+''''''';;'+++++''++''+'+'#+##@#'#+++@@##@#####+#@###@####@#+#@###@@##@@++@#
##@+####@###@''#++@###+##++#+#+###+@'+#@'+;'''';+'+'''+##+''';';'''';;;':''+++++'::;;+;;'';;:;';'''+;';;++++'+'+':'+;;;;:;+';'+'';'':''+''+'''#+''''+'+###@#+##'##@######+++#@+++@####@#######@@@@@@'#@#
####+#+@@####@#;+@##@###+##+##++++##+'+@@+;''';;'''''+++++';;;;';;';;;'';'';'+'++;'';';;'';;;;;;'+'#'''++++++''++';;;;;;;''';'''';;;';;+''#'''++';''''+##+###'+@@@@####+##++#@@'+####'@#######@@@@@#'@@#
#+#@###+'#'#+#@#'###@###+#@#++'++##+'''+#+#;;;'++'++'+'+;;;;;;';';;:;;''';;:;;;''';;;;;;;;;;;;;';'+''#'#'+'+''''++:;;;;;:'';;;;';';'';'+''+'''++''+#'''#+##';##++#@@#+++#+#+#@#++#@##'@########@@@@#+@@#
+#@#######;####@#'##@###+@##+#'++##'+++++++';''+##'+'+'+';;;;;;:;;;:;';'';';:::';;;;;::;;'';;';';;''+'+++'+'''''''';;;;;;+;;;'''''''+''+'''+++'#+#++'''++#;+'##@###@#+++++#+@@#@@+++#+@####+###@@@@#@@##
##@####@##;'#@####'#'#+####@#'#++#++'+++#+''''+++++#+'';;;;;;;;;;;;;;:;''';;:::';';';';;''';;';';;'#+##+'''+++'+'++';';:;;;;'+;;;;++''+''+'++++'+++'''++#:+;####+#@@@@#+++++#+###@@+@'@########@@@@+@@#+

Bad Wolf, in progress

Bad Wolf, in progress

Reality

From the waiver for a realty tv show:

I understand that in and in connection with the contestant selection process and the Program, I may reveal and/or relate, and other parties (including, without limitation, other participants, the Producer, the judges, and/or the Network) may reveal and/or relate information about me of a personal, private, surprising, defamatory, disparaging, embarrassing or unfavorable nature, and that my actions and the actions of others participating in the contestant selection process and/or in the Program may be embarrassing or of an otherwise unfavorable nature that may be factual or fictional. I further understand that my appearance, depiction, and/or portrayal in and in connection with the Program or otherwise, and my actions and the actions of others displayed in and in connection with the Program or otherwise, may be disparaging, defamatory, embarrassing or of an otherwise unfavorable nature, may expose me to public ridicule, humiliation or condemnation, and may portray me in a false light. I further understand that any information regarding me that Producer may disclose during the Program or otherwise may be more or less favorable than similar information disclosed by Producer regarding other participants. I acknowledge and agree that Producer, the Network, and any entity that exhibits or otherwise exploits the Materials, the Program or any other production, and any of their licensees, successors and assigns, shall have the right (but not the obligation): (a) to include any such information and any such appearance, depiction, portrayal, actions and statements in the Program or in any other exhibition or exploitation of the Materials, and (b) to exhibit, broadcast and otherwise exploit the Materials and the Program containing any such information and any such appearance, depiction, portrayal or actions. I understand and acknowledge that, while such conduct might otherwise constitute an actionable tort, I have freely and knowingly consented to such conduct. The waivers, releases and indemnities in this application and any other agreement that I have executed or that I may execute in connection with the Program and/or any other production expressly apply to any such inclusion and exploitation.