# -*- coding: utf-8 -*-
"""Story: Lost her book
"""
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
sys.path.append('storybuilder')

from storybuilder.builder import world as wd
from src.lostbook import config as cnf
THM = cnf.THEMES

# scenes
def sc_myfavorite(w: wd.World):
    nao, saya, akiko = w.nao, w.saya, w.akiko
    return w.scene("本が好きだ",
            nao.behav().d("本を開く"),
            nao.think().d("ただそれだけの行為が",
                "こんなにも$meの心を震わせる"),
            nao.be("bed").d("俯せになったまま右手を伸ばして枕元のスタンドライトの角度を変える。",
                "薄暗闇の中に煌々とした読書空間を作り出して",
                "開いた本は勿論",
                "最近見つけた個人的な掘り出し物の一冊だ"),
            nao.look().d("サイズはＢ５より少し大きい程度。",
                "淡い花柄が印刷された厚紙をカバーにして綴じられたおよそ百ページほどの同人誌で",
                "タイトルは『$i_booktitle1』だった"),
            w.nao.be(w.stage.town, w.day.current),
            nao.explain().d("主人公の$n_bookheroは真夜中になると寄宿学校の宿舎を抜け出し",
                "使われていなかった旧校舎の図書室を訪れる。",
                "実は夜な夜なそこでは本の霊たちのお茶会が開かれていたのだ"),
            nao.look().d("作者名は小さな字で『$fn_saya』と", "本の右下のところにあった"),
            nao.think().d("おそらく”さや”と呼ぶのだろう。", "それとも”さよ”だろうか"),
            nao.think().d("手触りの良い紙にしっとりとした文章がすぐさま物語の世界に誘ってくれる。",
                "それは退屈という$meの日常をあっという間に忘却してくれ",
                "物語の主人公$n_bookheroと一緒に夢のような体験をさせてくれるのだ"),
            nao.think().d("何の娯楽もないこの町で",
                "本の中でのささやかな出会いが$meにとっての唯一の楽しみと言っても良かった"),
            nao.think().d("今夜読み終えたら",
                "なけなしの小遣いを持ってまた明日",
                "続きを買いに行こう。",
                "あと一週間ほどで夏休みになる。",
                "今よりもっと本に没頭できる時間が増えるから出来れば本屋ある全ての彼女の本を揃えて",
                "一日中その世界に浸っていたい"),
            nao.think().d("本棚に並ぶものには途中までしか揃っていないものが多かったけれど",
                "この作者の本だけは何としても全巻揃えたい。",
                "そう思わせる手触りがあった"),
            nao.look().d("綴られた文字が",
                "$meの中に物語を刻んでいく"),
            nao.feel().d("その感覚のあまりの心地よさに",
                "いつまでも彼女の文章の海に浸かっていたい気分だった"),
                w.nao.think("彼女の本を全部そろえたい"),
                w.nao.think("人生を救われた"),
                w.nao.go(w.stage.bookshop),
                w.nao.know(w.i.vanishshop),
            )

def sc_knownews(w: wd.World):
    nao, dad, mam = w.nao, w.dad, w.mam
    return w.scene("本屋潰れるって",
            nao.be(w.stage.dyning, w.day.known),
            nao.behav().d("ぼんやりとした頭のままで箸を持って手を合わせる"),
            nao.look().d("高校の夏服指定の白シャツすら暑いからとＴシャツ姿のままで食卓に就いていたが",
                "手に取ったご飯茶碗は温かいを通り越して火傷しそうな熱を伝えてくれた",
                "大皿には昨夜の残りの野菜だらけの回鍋肉が半分ほど乗っていて",
                "それを適当に箸で摘んでは納豆の掛けられたご飯の上へと移し",
                "そのまま勢いよく口に掻き入れる"),
            mam.ask("夏休みのこと").t("で",
                "$naoは結局大学どうするの？"),
            nao.think().d("いつもみたいに食べ方についての母親の注意だろうと思ったのに",
                "そんな話を持ち出され", "途端に気が重くなる"),
            mam.talk().t("またそんな顔して。",
                "受験まで半年ないんだからいい加減にどうするか決めてくれないと",
                "お金のこともあるし",
                "お母さんたちだって困るのよ？"),
            nao.think().d("そうでなくても溜息がちで口うるさい母親が",
                "最近苦手だった"),
            mam.talk().t("あなたもちょっとは言ってやって下さい"),
            nao.look().d("$meが何も答えずに黙り込むと",
                "その矛先は最上段まできっちりシャツのボタンを留めて",
                "精密部品でも操作しているような箸使いで胡瓜の漬物を摘んでいる父へと向けられる"),
            dad.talk("本屋潰れる").t("小学校の前の$st_bookshop。",
                "閉店することになったそうだ"),
            nao.ask().t("え……それ", "ほんと？"),
            nao.look().d("箸を持ち替え",
                "眼鏡の右側のツルの下側を指で掻きながら「そうだ」と父は答える"),
            dad.talk().t("あそこのおばさんは$meが小学生の頃からずっと店番をしてたからいつまでもそのままな気がしていたが",
                "息子さん夫婦と一緒に暮らすことにしたんだとか"),
            nao.talk().t("誰かに店を譲るとかじゃなくて",
                "本屋さんそのものが閉まっちゃうってこと？"),
            nao.think().d("もしそうなら一大事だ。",
                "何故ならこの町には本屋が一軒しかない"),
            mam.talk().t("あらそうなの？",
                "コンビニじゃあ$poetbookなんて置いてくれないのよね。",
                "やっぱり購読申し込みするしかないかしら"),
            nao.look().d("既にご飯茶碗を空にした母親は",
                "立ち上がってキッチンの流し台に片付いたお椀から運びながら溜息をつく"),
            nao.think().d("意図的に話を逸してくれたのだろうか"),
            nao.look().d("そんな思いで父親を見たが",
                "味噌汁を持ち上げて啜るその目元は何も語らないように平静のままで",
                "小さくずりずりと音を立てて口にワカメを滑り込ませた"),
            nao.think().d("本屋が消える"),
            nao.think().d("その事実は$meにとって大学進学について頭を悩ませるよりもずっと大きな問題として",
                "朝から脳裏に横たわってしまった"),
            w.nao.know(w.i.vanishshop),
            )

def sc_checkclosed(w: wd.World):
    nao, akiko = w.nao, w.akiko
    return w.scene("潰れるんですか！？",
            nao.move().d("その日の高校からの帰り道",
                "一度も腰を降ろさずに立ち漕ぎのままメインストリートを走りぬけ",
                "$meは小学生の時からお世話になっている本屋まで急いだ"),
            nao.look().d("小学校の緑色の背の高いフェンスを右手に歩道を進むと",
                "交差点を渡ってすぐの模型店の左隣に",
                "小豆色のビニールの庇が出た二階建てが見えてくる。",
                "そこに白で書かれた『$st_bookshop』は輪郭がぼやけて書の字がよく分からなくなってしまっているけれど",
                "前の棚に並んでこちらを見る女性誌の濃いメイクのモデルや旅行雑誌のハワイやグアムの文字は見慣れたままで",
                "どこにも”閉店します”なんて書かれていない"),
            nao.deal().d("横断歩道を渡ってすぐにサドルから飛び降りると", "慌てて店前に横付けしてスタンドを立てる"),
            nao.go().d("前籠に入れた鞄を引っこ抜くと",
                "ドアを開けてすぐ右手のカウンターに声を掛けた"),
            nao.ask().t("おばちゃん店閉めるってほんとなの！？"),
            akiko.talk().t("あら$naoどうしたの？"),
            nao.look().d("高くなったカウンターの上には今週発売の週刊少年誌が三冊残っていた。",
                "その後ろで椅子に座りながら銀縁眼鏡を掛けたさらさらの銀髪をした女性が",
                "この店の主である$n_akikoさんだ"),
            nao.talk().t("どうしたじゃないよ。",
                "聞いたんだけど", "ここを閉めるってことは",
                "この町からおばちゃんの大好きな本が消えちゃうってことじゃないの？"),
            nao.look().d("そう言ってカウンターに身を乗り出した$meを",
                "$akikoは眼鏡の奥の優しい瞳をゆっくり閉じて一つ頷いてから",
                "手にしていた文庫本を置いた"),
            akiko.talk().t("うちが無くなったくらいで本は消えないよ。",
                "町民会館の図書室にだって", "$naoの通う学校の図書室にだって本は沢山ある。",
                "それに今はネットでいくらでも手軽に取り寄せられるんだろう？"),
            nao.talk().t("けどそれじゃ……"),
            nao.think().d("彼女の本はどこで手に入れれば良いんだろう"),
            nao.behav().d("それを口に出すことができずに俯いた$meに",
                "$akikoは小さく笑う"),
            akiko.talk().t("$fn_sayaさんの本のことでしょ",
                "$naoが本当に心配してるのは"),
            nao.look().d("$akikoは視線を店の奥",
                "地元の人の自費出版本や同人誌を置いているコーナーに向けた"),
            nao.think().d("その一画に平積みにされた同人誌の中に", "彼女の本も混ざっている。",
                "$meの手元にはまだ二巻までしかなかったが",
                "そこには七巻まで並べてある"),
            nao.ask().t("いつまで店", "やってるんですか？"),
            akiko.talk().t("心配しなくてもすぐに畳んだりはしないよ。",
                "それでも今年中が期限かねえ"),
            nao.think().d("残り五ヶ月ちょっと。",
                "それだけあれば残りの本は揃えられるだろうけれど",
                "その後", "彼女が続きを出すとすればそれはどこに置かれるだろう"),
            nao.think().d("もう会えないかも知れない"),
            nao.think().d("という思いは",
                "この町から本屋が失われてしまうということ以上に$meにとっては問題なのだと",
                "初めて理解した"),
            akiko.talk("閉店のこと"),
            nao.look("残りの本"),
            )

def sc_lazyschool(w: wd.World):
    nao, anzu, tamura, teacher = w.nao, w.anzu, w.tamura, w.teacher
    return w.scene("退屈な教室",
            nao.look().d("わざとらしい木目がある机に肘を突きながら顎を載せて窓の外にぼんやりと視線を投げ出すと",
                "誰もいない校庭にサッカーボールが一つ", "小さな陰を作っていた"),
            nao.be(w.stage.classroom),
            w.tag.comment("旧校舎の亡霊の話題を、ここの時間的解離がありそうな場所に突っ込む"),
            tamura.talk().t("なーに見てんだ"),
            nao.look().d("そう言って頭を小突いた$n_tamuraは終業式を終えたらさっさといつものジャージ姿に着替えていた"),
            nao.talk().t("いや。",
                "旧校舎の亡霊でもいるのかなと思って"),
            tamura.talk().t("潰した旧校舎にいた生徒たちの幽霊がこっちに移ってきたんだとかって",
                "あんなオカルト信じてんのか？"),
            nao.think().d("本当に信じているのは$i_clubの連中", "特に一番活動に熱心な$n_anzuくらいなものだろう"),
            nao.think().d("そういえば昨夜もその件でＬＩＮＥがあったことを思い出す"),
            nao.look().d("当の$anzuは後ろの方の席で別の女子と楽しそうに話していた。",
                "確か同じ水泳部の友だちだったと思う。",
                "二人とも短い髪に日焼けした肌が健康的で",
                "インドアな$meからしてみれば眩しすぎる"),
            tamura.talk().t("しかしあと半年ちょっとで卒業とか考えると",
                "なんか高校生活って案外短かったよな"),
            nao.talk().t("バスケ部の一年二年が忙しかっただけだろ？"),
            nao.look().d("両手を腰に当てて窓から遠くの山々を見やった$tamuraに笑いかけると、"),
            tamura.talk().t("あれはちょっと先輩が酷かったんだ"),
            nao.look().d("そう苦笑を返された"),
            nao.think().d("中学、高校と",
                "”青春”という文字が何度もちらつきはするけれど",
                "$meらのような大半の人間にとっては無関係な",
                "いや", "いずれは無理やり思い出してはそう呼ぶような",
                "消えてしまうどうでもいい日々を過ごしてきただけだ"),
            nao.think().d("高校生活が終わる。",
                "その響きに多少慌ててみたところで", "何か変わるとも思えなかった"),
            nao.deal().d("程なくして",
                "後退しつつある前髪を気にしながら教室に入ってきた先生の姿に",
                "怠そうな様子で各自の席へと戻っていく"),
            teacher.talk("夏休み").t("えー",
                "明日から夏休みに入る訳ですが……"),
            nao.look().d("担任の$ln_teacherは生徒たちの終業式を終えた後のざわつきが消えるのを待ってから",
                "事務連絡を始めた"),
            nao.hear().d("内容は高校最後の夏休みだから羽目をはずしたい気持ちは分かるがしっかり勉強しておかないと受験があるだとか",
                "つい今し方蒸し暑くて何人か貧血で倒れた体育館の中で長々校長先生から聞かされたような言葉を濃縮したみたいな",
                "諸注意だった"),
            anzu.talk().t("ねえ"),
            nao.hear().d("その声は真後ろの席からだった"),
            nao.behav().d("まだ担任のプリント読みが続いていて",
                "安易に後ろを振り返る訳にはいかなかった$meは小声で「なに？」と",
                "$anzuに返す"),
            anzu.talk().t("下見",
                "$naoも行くでしょ？",
                "昼ご飯持ってきたし"),
            nao.think().d("シタミ",
                "というたった三文字の言葉で沢山の忘れていた",
                "あるいは忘れようとしていたことを思い出す"),
            nao.reply().t("あぁ……うん"),
            anzu.talk().t("大学行ったらみんなバラバラになるんだしさ",
                "だからその前にちょっとくらい",
                "いいよね別に"),
            nao.think().d("既に隣の市の看護学校に行くことを決めている$anzuはそう気楽に言ってくれるけれど",
                "どこでも良いから東京の大学に入ると決意を固めている$tamuraも$meも",
                "まだ確定的な未来なんて何も手にしていない"),
            nao.think().d("他の同好会メンバーはもうすっかり受験モードでＬＩＮＥグループに顔すら出さないし",
                "正直$meも$tamuraも",
                "たぶんあの旧校舎の噂については露も気にかけていない"),
            anzu.talk(w.i.our_memory.flag()).t("思い出ってさあ",
                "きっと無理矢理にでも作ろうとしないと何も残らないもんなんじゃないかな。",
                "$naoはどう思う？"),
            nao.look().d("それに答えるよりも早くに担任の視線に気づき",
                "$meは沈黙した"),
            )

def sc_gotooldschool(w: wd.World):
    nao, anzu, tamura = w.nao, w.anzu, w.tamura
    return w.scene("かつての学校",
            nao.deal().d("昼ご飯は学校近くのコンビニでサンドウィッチを買って済ませた"),
            tamura.talk().t("$anzuの奴", "自分だけしっかり弁当持ちでやんの"),
            nao.look().d("いつもの膝までまくり上げたジャージと体操シャツというスタイルで隣を歩く$tamuraは",
                "少し長くなったスポーツ刈りのツンツンとした前髪を触りながら",
                "焼きそばパンだけじゃ足りないと何度も愚痴る"),
            anzu.talk().t("ちゃんと言っておいたのに忘れるあんたたちがいけないんでしょ"),
            nao.look().d("急勾配になったアスファルトの舗装路を先頭を切って歩いていた$anzuが振り返ると",
                "リボンを取り去ってボタンが胸元まで外されたそこに",
                "水泳部で日焼けした肌が見えていた"),
            nao.talk().t("勘違いしただけだって説明しただろう？"),
            nao.think().d("それは咄嗟の言い訳だったけれど",
                "事実$meはよく勘違いをする。",
                "$i_na_club", "この$i_clubが最初は正規の部活動だと思い込んだのもそれだった"),
            anzu.talk().t("分かってるよ。", "分かってる。",
                "もうこんな同好会のことはさっさと見捨てて解散してしまえばいいってことは分かってるよ"),
            nao.look().d("彼女は何度も振り返りながら$meたちが付いてきているのを確認し",
                "古い金網フェンスの扉を開けて",
                "雑草が生い茂る野道へと分け入って行く"),
            anzu.talk().t("でもずっと続いていた伝統を$meたちの代で消しちゃうなんてなんか悲しいじゃない？"),
            tamura.talk().t("けどさ"),
            nao.think().d("$tamuraは一度$meを見てから", "話に口を挟む"),
            tamura.talk().t("$meらがどうこうしたところで",
                "来年には部員ゼロになって廃部するのは確定事項なんだろ？",
                "だったら今してることって単なる自己満足ってやつじゃないのか？"),
            nao.think().d("よく言ってくれた",
                "という思いだったが",
                "それは彼女が立ち止まって腰に手を当てた姿を目にしたことで",
                "間違った選択肢だったのだと分かった"),
            anzu.talk(w.i.oldghost.flag()).t("じゃあさ",
                "あんたたちは$meがただ自分がやりたいからって旧校舎の亡霊の謎解明の為に",
                "旧校舎跡地の現地調査をしようとしていると",
                "そう言いたいの？"),
            nao.think().d("旧校舎の亡霊",
                "という", "よく分からないオカルト話に内心で苦笑する"),
            tamura.talk().t("そこまでは言ってないよ。", "なあ$nao"),
            nao.look().d("$tamuraは$meに助けを求めるように情けない視線を送ったが",
                "さっきの言葉じゃどう考えても$anzuは怒る。",
                "いつもそうだけれど",
                "$tamuraの言葉は少し乱暴だ"),
            nao.talk().t("何もこんな大切な時期にって話を",
                "$tamuraは言いたかったんだよ。", "なあ？"),
            nao.think().d("頼むから黙って頷いておいてくれ",
                "という祈りを込めてそうフォローしたが、"),
            tamura.talk().t("いや$meは時期とかじゃなくてこの取り組みそのものが無駄じゃないのかって話をだな"),
            nao.deal().d("更に油を注ぎそうな勢いだった$tamuraの口に手で蓋をして",
                "$meは必死に話題を逸した"),
            nao.talk().t("ところで本当にこの先に旧校舎が建っていたの？"),
            anzu.talk().t("$ln_teacher先生に古地図出してもらって確認したから間違いないはず"),
            nao.look().d("思い出すように見上げた後でそう言って$meと目線を合わせると",
                "彼女は再び先に立って歩き出す"),
            nao.look().d("その姿に$tamuraも$meと同じように安堵して小さな吐息を落としていたが",
                "目を合わせると$anzuの背を指差して「けどさ」と口を動かし始めたものだから",
                "首を横に振って苦笑するしかなかった"),
            )

def sc_oldlibmark(w: wd.World):
    nao, anzu, tamura = w.nao, w.anzu, w.tamura
    return w.scene("旧図書館跡",
            nao.look().d("野道に入って二百メートルほど進んだところで腰までの細い草が伸びているところに出た"),
            nao.ask().t("ここなの？"),
            anzu.talk().t("と思うんだけど"),
            nao.look().d("彼女は鞄から古地図を出して見ているが",
                "その脇を躊躇することなく$tamuraが歩いて行ってしまう"),
            tamura.talk().t("ほんと", "綺麗に野っ原だな"),
            nao.look().d("確かに$tamuraが言うように何もない。",
                "けれど不自然なほど綺麗に同じ草が生え揃っていて",
                "それの周囲を", "おそらく桜の木だと思うけれど",
                "それが四角く取り囲んでいる"),
            nao.talk().t("たぶん合ってる"),
            nao.move().d("だから$meはそう言って古地図を見返す$anzuの肩をちょんと叩いた"),
            anzu.talk().t("けど"),
            nao.talk().t("もう十五年も前に校舎は取り壊されたんだよね？",
                "だったら何も残ってないどころか",
                "こんな風に自然に返っていても仕方ないんじゃない？"),
            nao.look().d("彼女が何を思って旧校舎跡を調査したいと言い出したのかは知らないけれど",
                "よく考えてみれば更地に戻した後で誰も使わないまま放置すれば草だらけになるのは当たり前だ"),
            anzu.talk().t("草とか生えてても家の庭くらいだと思ってた。",
                "ほんとはね",
                "何か学校が建ってた痕跡とか",
                "体育館脇のテニスコートとか",
                "プールの跡",
                "それに旧校舎脇にあったと云われている別館になっていた図書室のあった場所とかね",
                "そういうのが見てみたかったの"),
            nao.ask().t("ねえ。",
                "その別館になってた図書室って何？"),
            nao.think().d("普段だったらわざわざ彼女の発言に突っ込んで藪蛇になるようなことはしない"),
            anzu.talk().t("話してなかったっけ？"),
            nao.think().d("けれどその学校とは別の建物になっていたという図書室のことを",
                "別の場所で聞いて", "いや読んで知っていたのだ"),
            anzu.talk().t("$i_na_clubの前身が$i_oldclubだったって"),
            nao.talk().t("真夜中の……"),
            anzu.talk().t("あれ？",
                "やっぱり話したことあった？"),
            nao.behav().d("$meは首を横に振り", "$anzuに続けるよう促した"),
            anzu.talk().t("だからさ",
                "この$i_clubって三十年前に$i_oldclubとして作られたものなのよ。",
                "それも最初は部活動じゃなくて",
                "本好きな生徒たちが数名",
                "放課後に集まって本を読みながらお茶会をしていただけのものだったの。",
                "それを物好きな先生がどうせなら部活動にしなさいってことで",
                "本を読む同好会として発足したんだって"),
            nao.think().d("その話からは", "どうしてもあの本の内容を連想してしまう。",
                "あれはひょっとすると実話を元にして書かれた小説なのだろうか。",
                "もし仮に作者がこの町出身だったならその可能性だって考えられるし",
                "ひょっとすると同じ高校に通っていた先輩で$i_oldclubのメンバーだったということだって有り得る"),
            tamura.talk().t("おーい！",
                "あったぞ！"),
            nao.hear().d("何だろう。",
                    "$tamuraが小さくなって手を上げている"),
            anzu.talk().t("何よ？"),
            nao.move().d("草を掻き分けて歩いていく$anzuに続いて",
                    "$meも$tamuraの方に向かう。",
                    "足元が見えないことを恐がらない彼女の逞しさに少し羨ましさを覚えながらも",
                    "あの本の中の彼女とはやはり違うんだな", "と思ってしまう"),
            nao.move().d("百メートル以上は歩いたと思う"),
            tamura.talk().t("な、これ。",
                    "何かの建物の基礎部分だろ？"),
            nao.look().d("足元の草を一部だけ引っこ抜いて露出した地面には",
                    "古いコンクリートの長方形が埋まっていた。",
                    "ただそれは基礎というよりも建物の一部",
                    "それこそ床や入り口だったのではないかと$meには思えた"),
            anzu.talk().t("図面からするとちょうど図書室が建っていた場所だと思うんだけど"),
            nao.look().d("$anzuは古地図の中の小さな校舎とその脇の施設の位置関係を考えながら",
                    "何度も顔を上げては「たぶん」と繰り返す"),
            tamura.talk().t("じゃあここでその真夜中クラブ？　だかが誕生したって訳だな"),
            anzu.talk().t("$i_oldclubよ。",
                    "変な呼び方しないで"),
            tamura.talk().t("何ムキになってんだよ。",
                    "そもそも真夜中って付けるところからしてちょっと変だろ"),
            nao.think().d("言われてみれば確かにそうだ。",
                    "別に夜中に集会をしていた訳でもないだろうに",
                    "どうしてそんな名前にしたのだろう。",
                    "何か謂れでもあるんだろうか"),
            nao.look().d("そう思って$anzuを見たけれど",
                    "彼女もそこまでの事情は知らないようだった。",
                    "古地図を仕舞って代わりに細かな字がびっしりのノートを取り出して見ていたが",
                    "首を振ると「特に聞いてない」と苦笑した"),
            nao.deal().d("$meたちは他にも何か痕跡が残っているだろうかと草を掻き分けながら探してみたけれど",
                    "それ以外には基礎部分らしきコンクリ片すら見つけられなかった"),
            nao.think().d("無くなってしまうということはただ物が消えてしまうのではなく",
                    "こんな風にそこにあったという痕跡すら失われてしまうものなのだな",
                    "という感慨が自分の中に静かに広がった"),
            nao.be(w.stage.oldlib_mark),
            anzu.explain("旧校舎事情"),
            nao.think(w.i.oldschool_reason.flag()),
            )

def sc_herbook(w: wd.World):
    nao, akiko, mam, dad = w.nao, w.akiko, w.mam, w.dad
    return w.scene("彼女の同人誌",
            nao.think().d("結局あの後$anzuは学校の図書室で古い資料を探してみると言って別れ",
                "$tamuraの方はバスケ部の練習に顔出してくると別れ",
                "$meだけが何もすることもないまま先に家に帰った"),
            mam.talk().t("ちょっと$fn_nao。",
                "あんたこの当たり障りのない成績に何か言いたいことはないの？"),
            nao.look().d("通知表を母親に提出して小言めいた物言いをされながらも、"),
            nao.talk().t("悪くないなら別にいいんじゃないかな……"),
            nao.move().d("冷蔵庫に冷えていたラムネを手に",
                "さっさと二階の自室に引っ込んだ"),
            nao.come(w.stage.myroom),
            nao.behav().d("むっとした部屋の空気を追い出すように慌てて窓を開け",
                "扇風機を回す"),
            nao.deal().d("それからさっさと制服を脱いで半袖短パンに着替えると",
                "ラムネを開けて一口",
                "続いて本棚から『$i_booktitle1』を引き抜いてベッドに転がった"),
            nao.think().d("これも同じ真夜中という文字がタイトルに使われている。",
                "同じというのは$i_oldclubのことだ"),
            nao.think().d("物語のタイトルが似ているというだけで",
                "それが何だということもないのだけれど",
                "本の中にも図書室が出てくるし",
                "そこでは人間の代わりに本の霊だけれども部活動と同じようにお茶会を開いている"),
            nao.look().d("本は手作業で閉じられていて",
                "本の右側が和綴じのもののように綴じ紐でしっかりと留められている。",
                "一般流通している出版社から出されたものだと簡単な著者紹介が書かれていることも多いけれど",
                "表紙の右下に小さく作者名がある以外は",
                "この$fn_sayaという人物についての情報は一切書かれていなかった"),
            nao.think().d("名前からすると女性のように思えるし",
                "内容を読んでみても", "またその丁寧で繊細な言葉選びからも",
                "作者は女性なのだと$meには思えた"),
            nao.think().d("彼女が同じ高校の出身者であるなら$i_oldclubの存在を知っていたかも知れないし",
                "それを利用して小説を書いたということだって考えられる"),
            nao.look().d("参考書が平積みにしたまま置かれている勉強机の上のラムネの瓶はすっかり汗をかき",
                "もう半分しかソーダ水を残していない"),
            nao.think().d("二巻", "三巻と彼女の本を揃えていけば",
                "そこに何かしらヒントが隠されているだろうか"),
            nao.think().d("それともそんな面倒なことをせずに直接会う？"),
            nao.talk().t("いやいやそれは流石に無理だって"),
            nao.hear().d("思わず声に出してから",
                "残りのラムネを一気に飲み干す"),
            nao.feel().d("喉の痛みは現実の痛みだ"),
            nao.think().d("小さい頃から何かと夢見がちな妄想をしてきた自分は",
                "いつだってその思いを現実にはしてこなかった。",
                "だって現実なんて痛みを伴うことばかりだから"),
            nao.behav().d("ベッドの上で背中を丸めて屈み込む"),
            nao.think().d("来月分の小遣いはもう前借りして使ってしまっている"),
            nao.think().d("半年分を一気に貰うことは可能だろうか？"),
            nao.think().d("その想像をした途端",
                "頭の上には眉間に皺を寄せた母親の顔が浮かび上がった"),
            akiko.talk("その作家さん好きなんだ"),
            w.nao.think("全ての本を集める"),
            w.nao.deal("本を集める"),
            nao.think("金が足りない"),
                w.nao.deal("店が潰れるまでに収集しなきゃ"),
                w.nao.know(w.i.vanishshop),
                w.nao.deal("本を買い集める"),
                w.nao.know("金が足りない"),
            )

def sc_findjob(w: wd.World):
    nao, mam = w.nao, w.mam
    return w.scene("仕事探し",
            nao.deal().d("翌日から$meが始めたのは受験勉強ではなくバイト探しだった"),
            w.nao.look("バイト探し"),
            nao.look().d("と言っても町唯一の本屋に置かれていたタウン誌を貰ってきて",
                "そこに書かれていた求人とにらめっこをしているうちに",
                "夏休みの一日目はさっさと過ぎていってしまう"),
            nao.come(w.stage.dyning),
            mam.talk().t("$y_naoさ",
                "大学諦めたの？"),
            nao.behav().d("母親からの唐突な質問に",
                "お昼の残り物の素麺を野菜と炒めたチャンプルを危うく喉に詰まらせるところだった"),
            nao.ask().t("急に何言い出すんだよ？"),
            nao.think().d("今日は父は東京本社への出張で", "残念ながら助け舟はない。",
                "母親と二人切りの夕食には気まずい空気が漂っていた"),
            mam.talk().t("$y_naoの部屋にこんなもの置いてたじゃない？"),
            nao.look().d("また勝手に部屋に入ったのだろう。",
                "隠し持っていたタウン誌を出すと",
                "いくつか付箋が付けられたページをパラパラとやってから「ねえ？」と疑問符を向ける"),
            nao.talk().t("大学にはちゃんと行くけどさ",
                "それはちょっとアルバイト探さなきゃいけなくなったから貰ってきただけ"),
            mam.talk().t("何？", "お小遣いなら前借りしたばっかじゃない。",
                "あんたまた本が欲しいの？",
                "参考書だったら買ってあげるわよ"),
            nao.think().d("同じものなら中古品でいいじゃない",
                "という母親は$meが新品の本を購入する度に「図書館で借りてくればいいのに」と言う。",
                "いくら親子でも価値観がこうも違うと",
                "話しても無駄だな", "という思いにいつも苛まれてしまう"),
            nao.ask().t("あのさ"),
            nao.think().d("それにいつまでもあの本が置いてあるとは限らない。",
                "店だって本当に年末まで開けておいてくれるかも分からない"),
            nao.talk().t("ちょっと聞いてみるんだけど"),
            nao.think().d("もしそうなったら$meの前から彼女の本は消えてしまう。",
                "それは普通の書籍と違い", "重版なんてことにはならず",
                "二度と手に入れることが出来なくなる"),
            nao.ask("仕事紹介", mam).t("お母さんさ。",
                "一万円くらいぱぱっと稼げるバイト", "知らない？"),
            nao.think().d("仕方ないわね", "と言って財布から諭吉を出してくれるようなそんな母親ではないことは分かっていたから",
                "せめて働き口の紹介くらいはしてもらえるかと思ったのだけれど"),
            mam.talk().t("そうねえ……リサイクル事務所の方は足りてるし",
                "あとは解体現場の仕事かしらね"),
            nao.look().d("息子のひょろっとした体躯を見てゲラゲラと笑う母に",
                "$meは必死に首を横に動かしてから", "慌てて残りのご飯を口に詰め込んだ"),
            nao.be(w.stage.myroom),
            nao.think("いくら掛かるか"),
            )

def sc_getjob(w: wd.World):
    nao, mam, sanae = w.nao, w.mam, w.sanae
    return w.scene("仕事は見つけたが",
            nao.be(w.stage.bus, w.day.workfirst).d("その三日後",
                "$meは母親世代の乗客で埋め尽くされたバスに乗っていた"),
            nao.think().d("流石に解体現場はあんたに無理よね",
                "と言った口で知り合いに電話を掛けて一応バイトの仕事を探してくれたことには感謝したいし",
                "こういう時の行動力は$meも父も持ち合わせていないものだから",
                "素直に認めたいと思う"),
            nao.look().d("普段こうしてバスなんて乗って郊外まで出ることがないから",
                "車窓からの景色はどこか新鮮に映った"),
            nao.look().d("こうして見ると本当に田畑が多くて",
                "町と呼べる部分なんてそのほんのひと握りだと分かる。",
                "辛うじて機能している駅前だって",
                "$meが知る限りでも既に三軒が閉店していて",
                "ずっとテナント募集が貼られたままのガラスケースのような空間が",
                "気づくと増えている"),
            nao.think().d("この町もいつかは必要とされなくなって消えてしまうのだろうか"),
            nao.hear().d("そんなことを考えていた$meの右側から大きな声で「どうせアタシらもここで死ぬんだからさ」と聞こえてきた"),
            nao.look().d("どうやら親の介護について笑いながら愚痴り合っているみたいだったが",
                "彼女らの息子や娘たちは", "都会に出たまま帰ってこないということなのだろうか"),
            nao.look().d("バスは交差点を折れて峠道の方へと入っていく"),
            nao.look().d("向かうべき工場は山を一つ超えた先の工業団地にあると聞いていた"),
            )

def sc_workingman(w: wd.World):
    nao, sanae = w.nao, w.sanae
    return w.scene("そうだ働こう",
            nao.be(w.stage.partfactory),
            w.nao.deal("働く"),
            w.nao.deal("金を貯める"),
            nao.deal().d("真っ白な頭まで覆う制服と", "専用の長靴", "それに半透明のゴム手袋をして",
                "$meは名札に『$ln_sanae』と書かれたベテランパートの人に続く"),
            sanae.talk().t("たまに若い人も来るんだけどすぐ辞めちゃうのよぉ。",
                "どうしてもおばちゃんばっかで肩身が狭いでしょう？"),
            nao.talk().t("そういうもんですか？"),
            nao.look().d("誰もが同じ全身白ずくめの格好をしていて",
                "おまけにマスクまでしているものだから男か女かすら$meにはよく分からない"),
            nao.look().d("エアカーテンが吹き下ろす入り口を潜った先には体育館くらいの広さにステンレス製の長机が並べられていた。",
                "そこには大量の黒い四角形の箱が並べられ",
                "手前の机の上には既に焼きあがった鮭や玉子", "飾り用のバランに大量に漬物が入ったボウル等が",
                "机から弾かれて落ちてしまいそうなくらい窮屈に置かれていた"),
            nao.hear().d("自分たちと同じ格好をした現場監督らしい男性が大勢のパートさんの前に立って今日の作業内容の説明をしていたが",
                "何種類もある弁当を千や二千といったオーダーで作り上げなければならないみたいだ"),
            sanae.talk().t("慣れるまで大変だけど",
                "全部同じに並べるだけだから簡単簡単"),
            nao.talk().t("はぁ"),
            nao.look().d("$sanaeはそう笑うが",
                "ずらりと並べられた弁当箱を目にすると軽い立ち眩みを覚えてしまう"),
            nao.look().d("けれど彼女たちは立ち止まることなく列を作ると",
                "それぞれ思い思いの具材セットを手に",
                "弁当ＡからＤまでの列に散って作業を始めていく。",
                "どこに何を置くのか",
                "どう載せるのか",
                "どんな順番で配置していくのか。",
                "誰も何も尋ねないのに滞りなく弁当は完成していく"),
            nao.think().d("きっと仕事とはこういうものなのだろう。",
                "最初は何も分からない。",
                "けれどいつの間にかあちら側の何の戸惑いもなく流れの中の一部になってしまえるように変化する。",
                "$meだって大学を出た先で", "どこかの会社に就職するだろう。",
                "内容は事務仕事なのか父親のような外回りや出張の多い仕事なのかは分からないが",
                "それでも目の前の何かを片付けることがただの日常になっていくのだ"),
            nao.behav().d("そんな思いで突っ立っていると",
                "$sanaeに肩を突かれた"),
            sanae.talk().t("最初から上手くなんていかないのは仕事も人生も同じよ。",
                "$naoはまず梅干しからやってみようかね"),
            nao.deal().d("そう言って小さな梅干しが入った大袋を手渡すと",
                "弁当Ｂの列に続くように促した"),
            nao.have("金を得る"),
            nao.think().d("その日働いたのはたったの三時間だったけれど",
                "終わった時には腰が痛くなっていたし",
                "制服の中のシャツは汗まみれだった"),
            nao.think().d("それでも学校で適当に授業を受けてまる一日を過ごすよりもずっと",
                "体の隅々までしっかりと過ごしたという実感があった"),
            nao.think().d("$meは帰りのバスの中であと四日働けばとりあえずの目標金額に達することを皮算用しながら",
                "初日の疲れそのままに", "軽い眠りに落ちた"),
            )

def sc_holdshop(w: wd.World):
    nao, akiko, sun = w.nao, w.akiko, w.ak_sun
    return w.scene("店を閉める",
            nao.look().d("七月の最終日は驚くほどの晴天だった"),
            nao.have().d("その日$meは初めての給料を手に",
                "$st_bookshopに急いで向かっていた"),
            nao.deal().d("風が全然なくて",
                "ペダルを漕ぐ足が重い。",
                "それでもＡＴＭから引き出した二万円の軍資金を鞄に突っ込んで",
                "腰を上げて坂を上がる"),
            nao.look().d("まだ十時前の日差しはそこまで強くないと思いたかったが",
                "既に額にはじっとりと汗が滲んでいた"),
            nao.look().d("小学校のフェンスが見えてくる"),
            nao.think().d("もう少しだ。",
                "これで今ある彼女の本の全てが揃えられる"),
            nao.look().d("グラウンドでは少年サッカークラブの試合が行われていて",
                "賑わいの中に母親たちの声援が飛んでいた"),
            nao.think().d("あの年代から既に", "外で遊ぶことより本の方がずっと好きな子供だった"),
            nao.think().d("最初に夢中になったのはエルマーのぼうけんシリーズだ。",
                "小学校の図書室で見つけて", "何度も借りて家で読み耽った。",
                "司書の女性が同じ名前で埋め尽くされた図書カードを見てはにっこりと「本好きね」と言ってくれたことを思い出す"),
            nao.look().d("交差点の信号が赤に変わり",
                "自転車に慌てて急ブレーキを掛けた"),
            nao.look().d("少し横滑りして横断歩道の前に止まったけれど",
                "その$meの視線の先で",
                "大きなトラックが店の前に停められているのが分かった"),
            nao.look().d("そのトラックのフロント側で$akikoと知らない男の人が何やら話している。",
                "彼女よりは随分と若いけれどそれでも$meと比べれば遥かに大人な感じだ。",
                "半袖のストライプのシャツにジーンズで", "やや猫背なところがどことなく$akikoと似ている"),
            nao.move().d("$meは信号が変わると急いで向こう側へ渡り",
                "$akikoに声を掛けた"),
            nao.talk().t("あの！"),
            akiko.talk().t("あら$nao。", "わざわざ来てくれたんだ"),
            nao.think().d("振り返ったその表情に", "どこか寂しさが混ざっているのが分かった"),
            nao.talk().t("その人は？"),
            nao.deal().d("自転車から降りて一旦スタンドを立てると",
                "眼鏡を掛けた小さな目の男性を見て尋ねる"),
            akiko.talk().t("ああ", "この子は"),
            sun.talk().t("いつも母がお世話になってます。",
                "$n_akikoの息子です"),
            nao.look().d("彼は$akikoが説明するよりも早くそう言って頭を下げると",
                "$meを見て「君が$ln_nao君だね」と優しく微笑んだ"),
            )

def sc_reasonhold(w: wd.World):
    nao, akiko, sun = w.nao, w.akiko, w.ak_sun
    return w.scene("閉店の事情",
            akiko.talk().t("もう殆ど運び出しちゃったから何もないけど"),
            nao.have().d("そう言って紙コップに入れたお茶を$akikoは持ってきてくれた"),
            nao.look().d("案内されたのは店舗部分を通り抜けたその奥側にある畳敷きの小さな部屋で",
                "机もなく", "引き出しを抜いた骨組みだけの戸棚と小さなブラウン管のテレビだけが残っていた"),
            sun.talk().t("母さん。",
                "店の中の本は全部積み替え終わったそうだけど",
                "他にもどこかに置いてあったりする？"),
            nao.look().d("引き戸を開けて顔を出した息子さんは$meと目が合うと軽い会釈をしたけれど",
                "$akikoとニ、三やり取りをしてすぐに戸を閉めて行ってしまった"),
            akiko.talk().t("ごめんなさいね。",
                "あの子が年末までは忙しいからって言ってたんだけど",
                "仕事が変わってこのタイミングでないと休みが取れないって言い出してね"),
            nao.talk().t("あ、いえ。",
                "色々ありますよね……"),
            nao.deal().d("どう答えていいものか分からず",
                "とりあえず出されたお茶を飲んだ。",
                "味はペットボトルの烏龍茶そのままで",
                "隣の模型店の前の自販機から出したものなのだろう。",
                "少しだけ温くなっていた"),
            akiko.talk().t("ここで一軒だけ残ってる本屋だから頑張らないといけないと思っていたんだけれど",
                "ほら", "去年の秋にしばらく店閉めてたでしょ？",
                "$meあの時入院してたのよ"),
            nao.think().d("それは母親経由で耳にしていた"),
            akiko.talk().t("体だけは親譲りで頑丈だと思ってたんだけど", "やっぱり歳には勝てないものかしらね"),
            nao.think().d("確か心臓のバイパス手術をしたのだと聞いたはずだ。",
                "今は元気そうに見えるけれど", "自分の親だっていつかは同じようなことが起こるのかも知れないと考えると",
                "もう少し頑張ってみたら", "とは言えないだろう"),
            nao.think().d("あの息子さんも同じような心境なのだろうか"),
            akiko.talk().t("でも良かったわ。",
                "最後に$nao来てくれて"),
            nao.ask().t("あ、あの……$fn_sayaさんの本て"),
            nao.think().d("肝心なことを思い出して$meは慌てて尋ねた"),
            akiko.talk().t("そうそう。",
                "そのことを言わなくちゃと思ってね"),
            nao.look().d("彼女は少し身を乗り出すようにして「あのね」と前置きをすると",
                "こう続けた"),
            akiko.talk().t("店を畳むと教えたら",
                "彼女", "置いていた分を全部引き取りますって持って帰ってしまったの"),
            nao.think().d("え……"),
            nao.think().d("それを聞いた瞬間に$meの頭の中にはここまで持ってきた色々な期待や願望と",
                "もう本が手に入らないことや物語の続きを知れない失望",
                "それに現実に作者がいてその女性が本を持って帰ったという事実が",
                "渾然一体となってぐるぐると回転した"),
            akiko.talk().t("大ファンの子がいるからせめて一部ずつでも置いていってくれないかって頼んでみたんだけど",
                "この本屋にあることが大事だって言われてね。",
                "何か事情があるみたいだったけど",
                "それを訊くまでに帰っちゃったわ"),
            nao.think().d("更に頭を殴られた気分だった"),
            nao.ask().t("$meのことを話したんですか？"),
            akiko.talk().t("名前は出してないわよ。",
                    "ただあなたの作品を大好きな高校生の子がいてね",
                    "って伝えただけ。",
                    "普通は照れたりしても喜んだりするものなんだけど",
                    "彼女はどういう訳か本気で困った顔をしていたわ。",
                    "何だったのかしらね"),
            nao.think().d("自分の存在を作者に知られた。",
                    "その上その作者はあまり良い思いをしなかった"),
            nao.think().d("その事実は背中を伝う汗をただの夏場の蒸し暑さの結晶から冷や汗へと変貌させる"),
            nao.ask().t("買わない方が良かった", "ってことですか"),
            nao.think().d("鞄の中に突っ込んだ封筒に入れた一万円札二枚は", "今どんな顔をしているだろう"),
            akiko.talk().t("そんなことはないと思うけど……売れない方が良かったと思ってらしたのかしらね。",
                    "そういえば最初に置かせて下さいって言ってきた時も",
                    "目立たない場所でいいって何度も言ってたわ。",
                    "あれはやっぱり売れて欲しくなかったってことなのかねえ"),
            nao.talk().t("あの", "本て買い取りだったんですか？"),
            akiko.talk().t("同人誌なんかはできるだけそうしていたわ。",
                    "売れてからお金を渡すというのも面倒でしょう？"),
            nao.think().d("なら彼女は$akikoに売りたかっただけなのだろうか"),
            nao.look().d("手に取った紙コップにはいつの間にかお茶が無くなっていた"),
            akiko.talk().t("ああ。", "お替わりならあるわよ？"),
            nao.talk().t("いえ", "大丈夫です"),
            nao.look().d("$akikoはそう断った$meの顔を覗き込む"),
            akiko.ask().t("もしどうしても欲しいというんだったら",
                    "直接彼女に聞いてみる？"),
            nao.talk().t("え？"),
            akiko.ask().t("一応連絡先は教えてもらってるから。",
                    "彼女ね", "この町の出身なのよ"),
            nao.think().d("その質問に対する正解は",
                    "何だったのだろう。",
                    "$meは自分がどうすべきなのか分からないまま",
                    "空になった紙コップの底を覗き込んでいた"),
            nao.come(w.stage.bookshop, w.day.closed),
            w.nao.know("閉店が早まる"),
            nao.meet(sun),
            akiko.talk("少し早くたたむことになって"),
            nao.ask("本は？"),
            akiko.talk("全部売れた"),
                w.nao.think("彼女に会いたい"),
                w.nao.know("全ては集められない"),
                w.nao.deal(w.akiko, "頼む"),
                w.nao.know(w.i.her_addr),
            )

def sc_gotoherhome(w: wd.World):
    nao, saya = w.nao, w.saya
    return w.scene("彼女の家に",
            nao.be(w.stage.bus).d("同じ町とは言っても",
                "彼女の暮らす場所はとても自転車で遊びに行けるような距離じゃなかった"),
            nao.look().d("$meは乗客が他に二人しかいないバスに揺られながら",
                "駅前のシャッター通りを超え",
                "通学の見慣れた住宅街を抜けていく"),
            nao.think(w.i.our_memory.deflag()).d("ぼんやりと過ぎ去る街並を見送りながら",
                "$meは$anzuが口にした”思い出は無理やり作らないとできない”という言葉を思い出していた"),
            nao.think().d("これは$meの単なる思い出作りなのだろうか"),
            nao.think().d("$akikoに教えてもらった本の作家", "$n_sayaの住所に向かっているけれど",
                "そこで彼女に会って",
                "$meは何を口にするのだろう。",
                "本を譲ってくれないかと交渉したいのだろうか。",
                "それともどうして自分の本を引き上げてしまったのか理由を知りたいのだろうか"),
            nao.think().d("分からない"),
            nao.think().d("実際に彼女に会ってみるまで自分がどうしたいのかはっきりしないということだけが",
                "今の$meに分かることだった"),
            nao.look().d("Ｔ字になった交差点で停車する"),
            nao.look().d("後続の車もなく",
                "対抗車線にも一台も走っていない。",
                "いや", "曲がってきた軽トラックが脇を通り抜けて行く"),
            nao.think().d("いつかは今乗っているバスすら走らなくなるのだろうか"),
            nao.think().d("そういえば$herbookの中に登場する町も過疎化が進んでやがて学校そのものが消えてしまうかも知れない",
                "と書かれていたことを思い出した。",
                "寄宿学校なのにどうしてそんな町の行く末までを彼女が気にかけているのが不思議だったが",
                "この町の人間なら", "心のどこかでそんなことを考えていてもおかしくない"),
            nao.look().d("信号が変わり",
                "バスは左側に折れていく"),
            nao.look().d("高校に向かうのとは別の方角で",
                "$meの知らない地域にどんどん分け入って行った。",
                "ところどころ道が狭く",
                "対抗車とすれ違うのもギリギリだったりして", "見ているとひやひやした"),
            nao.look().d("それでも三十分ほどで目的のバス停が近づき",
                "$meは鈍い音のブザーを押して赤ランプを灯した"),
            nao.think().d("その音の耳障りが悪かった所為じゃないとは思うけれど",
                "それまでは何も感じていなかったのに",
                "ポケットから出した財布を開けようとしたところで",
                "床に落としてしまう"),
            nao.behav().d("それを拾い上げ",
                "立ち上がったところでバスはゆっくりと停車した"),
            nao.deal().d("料金を支払ってステップを降りる"),
            nao.look().d("ドアが閉まり",
                "低い声のアナウンスを流してバスは行ってしまった。",
                "まだ一人だけ残っていたあのお婆さんは", "ここより更に先に住んでいるのだろうか"),
            nao.move().d("バス停からは五分ほどの距離だと聞いていた"),
            nao.look().d("歩き出した$meの視界には鬱蒼と茂る木々が張り出した斜面と",
                "蛇行する川が映っていて",
                "端が茶色くなったガードレールが途切れがちに並んでいた"),
            nao.move().d("時々やってくる車に気をつけながら", "そこを歩いていく"),
            nao.think().d("本来なら大好きな本の作者に会えるという喜びで足取りは軽くなるのだろうけれど",
                "一歩一歩が泥の中を歩いているようで",
                "家と表札の『$ln_saya』を探しながらも",
                "このまま辿り着けないまま永遠に彷徨い続けるのだろうか", "という思いが湧き上がった"),
            nao.look().d("それでも程なく", "少し低くなったところに木造の平屋があるのが見つかった"),
            nao.deal().d("古くなった木の表札に筆文字で辛うじて『$ln_saya』と読める",
                    "そのすぐ下にあったインタフォンのボタンを押す"),
            nao.hear().d("ジリリ", "と鳴って遠くで女の声がしたのが分かった"),
            saya.talk().t("はい？"),
            nao.look().d("玄関の木戸を開けて現れたのは",
                    "大きな丸眼鏡を掛けた割烹着姿の女性だった"),
            nao.ask().t("あの……突然の訪問", "すみません"),
            nao.deal().d("困惑の表情をしたままの女性を前に",
                    "そう言って鞄から彼女の本を取り出す"),
            saya.talk().t("あ……"),
            nao.hear().d("その一言を発しただけで彼女は戸を閉めてしまおうとしたけれど、"),
            nao.talk().t("待って下さい！"),
            nao.deal().d("慌てて声と右手を挟み込んで閉じられるのを阻止すると",
                    "拙い言葉で口早に経緯を説明した"),
            saya.ask().t("そういうの", "相手が迷惑だとは思わなかったの？"),
            nao.talk().t("えっと、その……"),
            nao.think().d("冷静じゃなかったのかも知れない"),
            nao.look().d("彼女は$meをじっと見たまま家の中から出てこようとはせず",
                    "手もずっと戸の端に置いたままだ"),
            nao.look().d("髪を後ろにまとめていて",
                    "化粧はしていないように思える。",
                    "年齢は若いようにも", "思ったより歳上のようにも見えて",
                    "ただつるりとした肌の丸顔は",
                    "自分が想像していた作者の顔とは全然違っていて",
                    "それがまた$meに現実というものを叩きつけてくる"),
            nao.talk().t("すみませんでした……"),
            nao.behav().d("何とか冷静さを取り戻そうとした挙句に$meは頭を下げ",
                    "そのまま背を向けた"),
            nao.move().d("歩き出す"),
            nao.think().d("どうしてこんな場所まで来てしまったのだろう"),
            nao.move().d("そんな思いを抱えたまま",
                    "帰路に就こうとする"),
            nao.think().d("そして気づいたんだ"),
            nao.ask().t("あ、あの！"),
            nao.look().d("玄関を閉めようとしていた彼女に慌てて声を掛ける"),
            nao.ask().t("次のバスって何分後ですか？"),
            nao.think("彼女について"),
            nao.think("彼女が本を引き取った事情"),
            )

def sc_meether(w: wd.World):
    nao, saya = w.nao, w.saya
    return w.scene("彼女に出会う",
            nao.look().d("畳の匂いに", "古びた柱や襖", "天井は格子になっていて一枚一枚板が嵌め込まれているようだ"),
            nao.behav().d("ちんまりと小さくなって出された座布団の上で正座をしながら",
                "彼女がお盆に運んできたお茶を茶托と共に手前に置く", "ただそれだけの動作をじっと見つめていた"),
            nao.come(w.stage.herhome),
            w.nao.go(w.saya, "彼女に会う"),
            saya.talk().t("それで"),
            nao.look().d("正座ではなく左側に少し崩して$meの正面に座った彼女はやや困り眉のまま",
                "そう言って改めて事情を話すのを許してくれた"),
            nao.talk().t("あなたの……$fn_sayaさんの本が全部引き上げられたというので",
                "$meが半ば強引に住所を聞き出してここまで来ただけで",
                "$akikoには何も非はありません。",
                "とにかくそれだけは分かって下さい"),
            nao.look().d("溜息がちに頷くと", "彼女は額に掛かった数本の前髪を手を払う"),
            nao.talk().t("えっと",
                "あなたの本", "$herbookに出会ったのは今年に入ってからでした。",
                "ちょうどゴールデンウィークに何か新しいものをと思って探しているところに",
                "$st_bookshopさんの地元の作家コーナーに見つけたんです。",
                "最初は珍しい和綴じの綺麗な本だな", "という印象でした"),
            nao.think().d("本は$meにとっていつも探すものじゃない。",
                "それは常に出逢うものだった"),
            nao.talk().t("レジに持って行った時にその値段を知って一瞬どうしようか迷いました。",
                "そこに並べてあった続きのものまでの購入を考えると",
                "とてもじゃないけど全部は揃えられなかったからです"),
            nao.think().d("千八百円という価格は$meに購入を躊躇させるのに充分なものだったけれど",
                "それでも買いたいと思わせる予感を", "いつも信じていた。",
                "そしてその予感はいつだって", "$meに新しい驚きや感動を与えてくれる"),
            nao.talk().t("でも手に入れて", "その日の内に半分まで読んで",
                "来月には続きの本を買う計画を立てるくらいには",
                "お気に入りの本になったんです"),
            nao.look().d("彼女はずっと眉を寄せたまま",
                "神経質そうに$meの言葉を聞いていた。",
                "時折", "思い出したかのようにお茶を一口飲むと",
                "乾いた唇が何か言いたげに薄く開く"),
            nao.talk().t("でもお店が閉まる", "それも年内には閉まると聞いて",
                "何とか時間がある夏休み中に働いてでも手に入れておかないと",
                "もうこの物語の世界の続きを見られない",
                "そう思っていつもなら自分があんなに必死になることはないのに",
                "苦手な母親のツテを頼ってまでバイトを探して",
                "それでやっと手に入れられるって店を訪れたら……"),
            saya.talk().t("ちょうど閉める準備をしていた。",
                "だから店主の方に事情を説明して$meの家までやってきた。",
                "そのことの意味を尋ねているのよ？"),
            nao.look().d("眼鏡の奥は強い眼差しだった。",
                "咎めるような口調ではないけれど",
                "苛立ちなのか", "緊張なのか",
                "彼女の何かしらの意志をそこに感じた"),
            nao.talk().t("意味は……本の続きが読みたかったから。",
                "それじゃ駄目ですか？"),
            nao.behav().d("思わず視線を逸したくなった。",
                    "けれどそれをしたらここまでやってきた意味が無くなってしまう"),
            saya.talk().t("あれのどこがそんなに面白いというの？"),
            nao.talk().t("え……"),
            saya.talk().t("名前もよく分からない地方の町に暮らす素人が書いて自分で製本しただけの",
                    "単なる趣味の延長じゃない。",
                    "地元の主婦が園芸品や工芸品を喫茶店なんかに飾らせてもらうようなものよ。",
                    "仲間内の自己満足。",
                    "関係のない人たちにとっては人生に何も影響を及ぼすことのない風景画のようなものよ"),
            nao.think().d("それは強烈な自己否定にも思えた"),
            nao.think().d("違う。",
                    "あなたの作品はそんな自己満足の工芸品なんかじゃない。",
                    "もっと素晴らしいものなんです"),
            nao.think().d("そう口に出して言いたかった"),
            nao.look().d("けれど目の前できつく睨みつけるようにして唇を結んだ彼女に",
                    "そんな$meの生易しい言葉はとても掛けられなかった"),
            saya.talk().t("ね"),
            nao.think().d("沈黙が二人の間に揺蕩っていたところを",
                    "今までとは全く違う穏やかな声音で彼女が破った"),
            nao.talk().t("え？"),
            saya.talk().t("作品を書いた本人になんて会うものじゃないでしょう？"),
            nao.look().d("彼女はそう言うと", "驚きで固まった$meを見ながら手で口元を隠しながら笑い声を上げる"),
            saya.talk().t("ごめんなさい。",
                    "けどあまりに真面目に自分が書いた作品について熱く語られたりしても困るし",
                    "それにもう",
                    "続きを書いたりしないから。",
                    "できたらあなたが購入したという$meの本も引き取りたいくらいなのよ"),
            nao.ask().t("どうしてですか？",
                    "誰かに読んでもらいたいから書いたんじゃないんですか？"),
            nao.think().d("$anzuたちには話したことはなかったが",
                    "隠れて小説のようなものを書いたりしている。",
                    "ただそれはとても他の誰かに見せられるようなものじゃなく",
                    "ウェブ上の小説投稿サイトもアカウントを作ったまま",
                    "作品の公開みたいなことは一度もしていない"),
            saya.talk().t("普通はきっとそうなんでしょうね。",
                    "でも$meはね", "もう本だとか小説だとかはどうでもいいの。",
                    "誰かに届けるとか", "自分の思いを表現するとか", "そういったこととは無縁でいたい。",
                    "それよりはね", "何て言うか", "ケジメみたいなものだったのよ……今回書いたのは"),
            nao.look().d("急に表情が柔らかくなった彼女はそう前置きすると",
                    "お茶を飲んでから",
                    "少しだけ事情を教えてくれた"),
            saya.talk().t("実はね", "昔……といっても十年ほど前になるのだけれど",
                    "別名義で本を出していたことがあったの。",
                    "$rondo1から始まる$rondoseriesというのが少しだけ売れてね"),
            nao.ask().t("$i_anothername？"),
            saya.talk().t("知ってるの？"),
            nao.talk().t("友だちに$meが好きかも知れないっていうから借りて読みました。",
                    "でもあれって$herbookとは全然違いますよね？",
                    "本や図書室は出てくるけれど",
                    "その……イケメンとか軽口叩く男キャラとか出てきて",
                    "なんて言うか"),
            saya.ask().t("子供向け"),
            nao.think().d("その通りだった。",
                    "ライトノベル", "それも中高生女子向けの雰囲気のものだと最初読み始めた時は思った"),
            saya.talk().t("そういう要請だったのよ。",
                    "コンテストで特別賞に入った応募原稿はもっと児童文学っぽい作品になっていたの。",
                    "けどね", "そこの出版カラーに合わないからってことで",
                    "男性キャラを入れたり", "それをイケメンにしてみたり",
                    "背中がぞわってするような甘い台詞を言わせてみたりしたの。",
                    "でもそうしたからか", "デビュー作は思ったよりも好評でね",
                    "じゃあシリーズ化しましょうということでいくつか書かせてもらえたの"),
            nao.think().d("そう説明されると確かに第一巻で探偵役として登場した男性キャラが不自然に浮いて見えたのも納得がいく"),
            nao.ask().t("けどあれって途中で終わってましたよね？"),
            nao.think().d("借りたものが全てで確か続刊は出ていないと聞いていた"),
            nao.look().d("ええ", "と彼女は頷くと話を続ける"),
            saya.talk().t("何とか三巻目までは編集方針に従って書いてみたんだけれど",
                    "自分としてはしっくりこなくて",
                    "それで四巻目からは少しずつ元の$meの作風に戻していったの"),
            nao.think().d("ああ",
                    "とその言葉に思わず心の中で頷いてしまう"),
            nao.think().d("$rondo4はそのシリーズの中で$meが一番好きな作品で",
                    "探偵役のキャラは最後の事件解決時だけ登場し", "それ以外は主人公とかつて親友だった女子との友情の歴史と悲しい秘密が描かれている。",
                    "それは確かに今までの作風とは打って変わって細やかな心情が本や背景",
                    "彼女たちの仕草などの描写に表されていて",
                    "小説は単なる物語が描かれているものじゃないんだと気付かされた作品だった"),
            nao.talk().t("$rondo4", "好きでした"),
            nao.think().d("だから話を遮ってしまうと思ったけれど",
                    "その思いを口にした"),
            nao.look().d("彼女は苦笑がちに「ありがとう」と言うと",
                    "話を続ける"),
            saya.talk().t("読んでくれてメールやお手紙をくれる子たちからの評判は良かったわ。",
                    "けど数字は出なかった。",
                    "基本的に後続の刊になるほど売上は落ちていくものだからそこまで心配しなくても良いとは言われたけれど",
                    "自分の所為だというのは分かっていたの。",
                    "事実", "最終巻となってしまった第五巻を出した後は",
                    "プロットを練り直してくれと言われて何度も提出し直したけれど",
                    "続きを出してもらえることにはならなかった"),
            nao.hear().d("淡々と語られる$i_anothername時代の話は",
                    "社会の仕組みや出版の際のやり取りのことを何も分からない$meにとって",
                    "本当は残酷な童話みたいに何だか胃袋の下の辺りを撫でられているような居心地で聞いているしかなかった"),
            saya.talk().t("だからね",
                    "作家である$meはあの時に終わってしまったの。",
                    "今はただの$n_sayaという一人の女性で",
                    "その一般人が自分の趣味に区切りを付ける為に書き上げたのが$herbookなのよ"),
            nao.look().d("彼女はそこまで話し終えると「ちょっとごめんね」と言って離席した"),
            nao.think().d("その場に一人残された$meはお茶を飲む振りをしながら",
                    "どうして彼女があんな打ち明け話をしたのかについて考えてみる"),
            nao.think().d("本を全て引き上げたいくらいだ", "と言っていた"),
            nao.think().d("けれどあそこに書かれてあったものは紛れもなく",
                    "彼女", "$n_sayaが書きたかった世界なのだと思えたし",
                    "自分が書きたいものを書いたという$rondo4よりずっと",
                    "彼女の色が出ていたと思う"),
            nao.think().d("素人の$meにとっては書かれたものがプロによるものかアマチュアによるものかなんて判別はつかない。",
                    "けれどそれが自分にとって素晴らしいものかどうかは分かるし",
                    "少なくとも今までに読んだ作品の中でも群を抜いて集めたいと感じたものだった"),
            nao.think().d("それなのにどうして彼女はそれを",
                    "誰にも読ませたくないような風に言ったのだろう"),
            nao.look().d("戻ってきた彼女は髪を解いていて",
                    "癖が付いた髪が肩に掛かっていた"),
            saya.talk().t("ごめんなさい。",
                    "お茶のお替わりはいる？"),
            nao.talk().t("あ、はい"),
            nao.look().d("空になった湯呑みを彼女に渡そうと膝立ちになる"),
            saya.talk().t("あ"),
            nao.look().d("その手が彼女に触れて",
                    "湯呑みを落としてしまった。",
                    "畳を転がったそれは飲み残しが無くて良かったけれど",
                    "それでもぐるりと回りながら彼女の足元に向かうと",
                    "ピンクの柄物の足首が見える靴下の先に当たって止まった"),
            nao.talk().t("あの", "ごめんなさい"),
            saya.talk().t("いいのよ。",
                    "うちの母もよく落とすから"),
            nao.look().d("特に怒った様子もなく拾い上げると",
                    "奥に引っ込んで新しいお茶を入れてきてくれた"),
            nao.talk().t("すみません"),
            saya.talk().t("気にしないで。",
                    "それに謝り過ぎるのは相手に失礼よ"),
            nao.look().d("穏やかにそう言いながら座ろうと左膝を座布団の上に突く"),
            nao.think().d("その言葉には聞き覚えが",
                    "いや見覚えがあった"),
            nao.talk().t("それ", "主人公の$n_bookheroが先輩に言われた言葉ですよね？"),
            nao.look().d("$sayaの目が大きくなる"),
            nao.talk().t("それに小学校時代の幼馴染で本の幽霊だった$n_bookrival。",
                    "あれは$rondo4に出てきた主人公の元親友をオマージュしたものでしたよね？",
                    "そもそもが$herbook自体",
                    "$rondo4をあなたが本当に書きたかった形にしたものじゃないんですか？"),
            nao.think().d("ずっと引っかかっていたことが綺麗に繋がった感覚だった"),
            nao.talk().t("それをこの町唯一だった本屋に置かせてもらったというのは",
                    "やっぱり誰かに読んで気づいて欲しかったからじゃないんですか？"),
            nao.look().d("$n_sayaは座ろうとしたままの姿勢で$meを見つめていた"),
            nao.talk().t("誰の目にも触れないまま消えていいだけの物語を書きたい作家なんて",
                    "プロとかアマとか関係なく", "誰一人いませんよ。",
                    "本当は違うんですよね？",
                    "$meを追い返す為の口実なんですよね？"),
            nao.think().d("そうであって欲しいというただの願望かも知れない。",
                    "けれどそれすら口にしなかったらまた彼女と彼女の作品が自分の前から消えてしまうんじゃないかと思うと",
                    "つい声にしてしまっていた"),
            saya.talk().t("そう言えるのはね",
                    "あなたがまだ自分の目に映るものだけが世界だと信じているからよ。",
                    "本当は誰の目にも留まらずにひっそりと消えていくものばかりなの。",
                    "小説だってね", "毎月沢山の本が出版されては誰の手にも取られずにタイトルすら知られないまま消えていくものが大半なのよ。",
                    "でもその現実を知っているのは",
                    "消えてしまった本を書いた本人くらいなもの。",
                    "自分が必死に書いたものが誰にも届かないんだと分かったら",
                    "自然と書き続けることの虚しさに気づくわ"),
            w.sy_mam.talk().t("$fn_saya"),
            nao.look().d("奥から別の女性の声がした"),
            saya.talk().t("はーいお母さん。",
                    "ちょっと待ってね"),
            nao.look().d("彼女はそれに答えて立ち上がると、"),
            saya.talk().t("ごめんなさい。",
                    "母が足を悪くしてて色々と手伝わないといけないの"),
            nao.talk().t("あ、いえ。",
                    "その", "$meこそ何か突然来てすみませんでした"),
            nao.look().d("いいのよ。",
                    "そう言って彼女は行ってしまう"),
            nao.deal().d("$meはいっぱいに入れてもらったお茶を全部飲み干すと腕で口元を拭い",
                    "立ち上がる"),
            nao.look().d("部屋の隅に置かれた背の低い戸棚の上に白い固定電話と短いペンの刺さったメモ帳が見えた"),
            nao.look().d("その上の壁には七月のカレンダーが掛かっていたけれど",
                    "明日でそれともお別れだ"),
            nao.move().d("そんなことを思って",
                    "和室を出る"),
            nao.talk().t("お邪魔しました"),
            nao.move().d("玄関でそう大声を出して頭を下げると",
                    "$ln_saya家を後にした"),
                w.nao.go(w.saya),
                w.nao.know(w.i.her_addr),
                w.nao.meet(w.saya),
                w.nao.know(w.i.her_mind),
            )

def sc_schoolday(w: wd.World):
    nao, anzu, tamura = w.nao, w.anzu, w.tamura
    return w.scene("登校日",
            nao.go(w.stage.classroom, w.day.schoolday),
            tamura.talk().t("なんで真面目に学校来てるんだよ"),
            nao.be().d("体育館から戻ってきた$tamuraは$meの前の席に陣取って",
                "机の上に上半身を投げ出した"),
            nao.talk().t("先生たちにも色々事情があるんじゃないの？",
                "それよりもさ"),
            nao.look().d("八月の第二週の金曜という中途半端な時期だからか",
                "半分くらいしか生徒がいなかった。",
                "ただその中にちゃんと$n_anzuの姿もあって",
                "あの日から若干の気まずさを抱えたまま",
                "互いの視線を気にしていた"),
            tamura.talk().t("そういや$naoは夏期講習出てる？"),
            nao.talk().t("ちょっと用事があってな。", "$tamuraは……どうせ出ないよな"),
            nao.look().d("尋ねるまでもなかったという笑みを返され",
                "$meは苦笑した"),
            nao.think().d("まだ大学のことも決めていない。",
                "将来のことも決めていない。",
                "自分が何をしたいのかも分からない"),
            nao.think().d("それこそこの気怠い教室の空気があと数年続いてくれたらと思わないでもない"),
            nao.think().d("そういえば$n_sayaのところに書き置きしてきたメールアドレスと電話番号には",
                "何の連絡も入らないままだった。",
                "結局自分がやったことは何も意味を持たないまま日常に埋没して",
                "いつかは思い出にすらならないまま消えてしまうのかと思うと",
                "人生の大半は無意味なことの繰り返しなのかも知れないな",
                "なんて思えてしまう"),
            nao.think().d("けれどそういうことを$anzuなんかに言ってしまうと途端に",
                "後ろ向きな日々を送ろうとするかだとか何とか言い出して",
                "思い出作りという名の地域探索に駆り出されるから",
                "最近は彼女の前では黙り込むことが増えた"),
            anzu.talk().t("何？"),
            nao.talk().t("え？"),
            nao.look().d("噂をした訳ではないけれど",
                "$anzuは$meの席までやってきて寝転ぶ$tamuraの顔の隣に右手を突き",
                "睨みつけるようにして唇を曲げた"),
            anzu.talk().t("何度も見てたでしょ？",
                "何？"),
            nao.talk().t("いや何も。",
                "元気そうだよなって$tamuraと話してただけ"),
            nao.look().d("なあ？",
                "と同意を求める視線を送ったが",
                "頭を起こした$tamuraは立ち上がり",
                "笑顔を浮かべたまま自分の席の方へと歩いていく"),
            anzu.talk().t("何でもいいけどさ",
                "昨夜送ったＬＩＮＥちゃんと見たの？"),
            nao.talk().t("えっと……"),
            anzu.talk().t("あれから資料を当たってみて分かったことがあるの。",
                "それについてちょっと$naoにも訊きたいことがあるから残ってて"),
            nao.think().d("内容までは確認しなかったが",
                "今の言葉で彼女がまだ旧校舎と$i_oldclubのことに拘りを持っていることはよく分かった"),
            anzu.talk().t("$tamuraは部活に顔出すから来れないって言ってるけど",
                    "$naoは大丈夫だよね？"),
            nao.deal().d("$meは笑みを作ったまま",
                    "何と答えれば正解だったのだろう"),
            )

def sc_graduate(w: wd.World):
    nao, anzu, tamura = w.nao, w.anzu, w.tamura
    return w.scene("卒業生",
            nao.move(w.stage.libroom).d("教室で担任が高校最後の体育祭の準備が遅れているという実行委員からの訴えを報告してから解散した後で",
                "$meは$anzuに連れられて教務棟の一階の薄暗い通路の奥にある資料室という場所に向かっていた"),
            nao.ask().t("なあ"),
            anzu.talk().t("お弁当の心配はしなくていい"),
            nao.talk().t("は？", "別にそんな心配はしてないけどさ……"),
            nao.look().d("夏服の半袖が素肌に張り付きそうなじっとりとした汗が",
                "不自然なほど彼女の背中に滲んでいるのが分かった"),
            nao.feel().d("確かに今日は一段と蒸し暑い。",
                "それに無風で空間そのものが湿気を含んでいるような息苦しさがある"),
            nao.ask().t("なあ？"),
            anzu.talk().t("調べてみたらさ",
                "結構$meたちに縁がある人物の名前も出てきたんだよ？",
                "例えば元部員に",
                "先月突然閉店しちゃったけど$st_bookshopのおばちゃんの息子さんがいたとか"),
            nao.talk().t("はぁ！？"),
            nao.behav().d("その名が出ることは全然考えになかったので流石に声を張り上げてしまった"),
            anzu.talk().t("なんでそんなビックリするの？", "$naoって知り合いだった？"),
            nao.think().d("息子さんが$akikoさんに何人いるのかは知らないが",
                "おそらく閉店準備中だったあの日に出会った真面目そうな男性がそうだろう"),
            anzu.talk().t("うちのお父さんも存在だけは知ってたって言ってたし",
                "意外と有名だったのかも知れない", "$i_oldclubって"),
            nao.look().d("短くした髪が項の部分で薄くなっている。",
                "つんと張った耳がよく見えて",
                "いつ髪を切ったのだろうと",
                "そんなことを考えた"),
            nao.look().d("引き戸になっているそこに鍵を差し込んで開けると",
                "$anzuは先に入って電気を点ける"),
            nao.look().d("部屋は少し黴臭く",
                "両側の壁に立つ本棚に重そうな本がびっしり詰め込まれている。",
                "部屋の中央に会議机が一つ出してあったが", "その上にも事典のような分厚い本が平積みになっていて",
                "まるで小さな図書室といった趣だった"),
            nao.ask().t("ここって何の為の部屋なんだ？"),
            anzu.talk().t("歴史の$ln_rekishi先生が図書室にあった貴重な資料を保管しておく為の部屋なんだって"),
            nao.talk().t("どうして図書室にそのまま置いておかないの？"),
            nao.look().d("$anzuは本棚から何かを探しながら答える"),
            anzu.talk().t("よく知らないけど", "昔何かあって一冊欠けてるんだってさ……あった"),
            nao.look().d("そう言って彼女が引き抜いたのは黒に近い深緑色をした『$areahistory』と書かれた本だ。",
                "机の上に広げると", "薄い油紙のようなページを捲っていく"),
            nao.ask().t("これが$i_oldclubに何か関係があるの？"),
            nao.think().d("何も説明されないまま付いてきてしまったけれど",
                "いつも以上に集中力を見せている$anzuの迫力に徐々に気圧されていた。",
                "どうしてそこまで無駄なことに頑張れるのだろう"),
            anzu.talk().t("$naoはさ",
                "いつかこの学校も消えちゃうって言われたらどうする？"),
            nao.talk().t("え？",
                "それは", "何て言うか",
                "仕方ないんじゃないの？",
                "少子化とか過疎化とか",
                "上本宮小なんて今全校生徒合わせて五十人いないって言ってたし"),
            anzu.talk().t("学校が消えても$meたちの思い出はここに残るのかな？"),
            nao.think().d("$anzuは何が言いたいのだろう"),
            nao.think().d("ただ", "何だろう。",
                    "その問いかけをどこかで見たことを不意に思い出した"),
            anzu.talk().t("ほら見て", "ここ"),
            nao.look().d("そう言って指で差したページには『田倉高校移設反対運動の経緯』という太字に続いて",
                    "びっしりと上から下までを埋める文章が書かれていた。",
                    "ページの左半分には数枚のモノクロ写真も掲載されていて",
                    "それは$meの知らない旧校舎の建物と",
                    "その隣に立つ六角形の不思議な別館が写っていた"),
            nao.talk().t("あの図書室だ……"),
            nao.think().d("その姿は一度頭の中で思い描いたそれを具現化したものだった"),
            nao.think().d("そう。",
                    "これは$herbookの中に登場する寄宿舎の図書館",
                    "つまり真夜中に本の霊たちがお茶会を開くというあの図書館なのだ"),
            nao.ask().t("移設反対運動ってどういうことなんだ？"),
            anzu.talk().t("詳細は読まないと分からないけど",
                    "お父さんたちから聞いた話を統合すると",
                    "どうも当時かなり激しい反対運動があったんだって。",
                    "特に図書室として使っていた別館は大正時代に海外の有名な建築家のデザインで",
                    "歴史的価値も高いからっていうんで",
                    "お父さんも署名を求められたって言ってた"),
            nao.look().d("ページを捲ると署名は一万集められたが既に新校舎の建築が決定していて",
                    "最終的に町議会で移設中止案は否決されたと書かれていた"),
            nao.talk().t("そこまで反対する人がいたのに",
                    "今じゃただの野原になっているのか……"),
            anzu.talk().t("うん。", "そういうこと"),
            nao.look().d("彼女は椅子に座りながら続きを読んでいたが",
                    "$meは埃が溜まった窓際に行き", "何とも言えない胸の中の虚しさを味わっていた"),
            anzu.talk().t("きっとね",
                    "これが旧校舎の亡霊の正体なんだよ。",
                    "みんなが無くしたくなかったっていう気持ちと",
                    "何もできなかったという後悔",
                    "それに……沢山の消えてしまった思い出たちの幽霊"),
            nao.think().d("その言葉は$herbookの中に登場する本の霊たちを思い出させた"),
            anzu.talk().t("ねえ$nao"),
            nao.ask().t("何？"),
            nao.look().d("振り返ると",
                    "$anzuは立ち上がり$meに近づいて来る"),
            nao.ask().t("$anzu？"),
            anzu.talk().t("$naoはさ", "$meを亡霊にしたいの？"),
            nao.talk().t("な、何言ってるんだ？"),
            nao.look().d("額が濡れて", "彼女の前髪が眉毛の上に張り付いている"),
            anzu.talk().t("最後の夏になるのに",
                    "何も変わらないまま終わっていくのが",
                    "$meは嫌……"),
            nao.talk().t("$anzu……"),
            anzu.talk().t("いつまでも", "その呼び方なんだね"),
            nao.deal().d("$anzuは窓を背に立ったままの$meの胸元に右頬を寄せて",
                    "体を密着させた。",
                    "彼女の熱が薄い制服のシャツ越しでも分かって",
                    "どうすればいいか分からない"),
            nao.deal().d("その肩に触れて",
                    "とりあえずと軽く押す"),
            anzu.talk().t("$fn_nao……"),
            nao.look().d("泣きそうな目をしていた"),
            nao.move().d("$meは何も言うことができず",
                    "そのまま強く押して引き剥がすと",
                    "慌てて部屋から駆け出て行った"),
            nao.think().d("突然どうしたんだ"),
            nao.think().d("という思い以上に",
                    "彼女がそんな風に自分を見ていたことに混乱していて",
                    "走っているうちに思い切り大声を上げていた"),
            nao.think().d("何故だかそれが",
                    "とても悲しくて仕方なかった"),
            # TODO: 卒業生の話
            )

def sc_confusion(w: wd.World):
    nao = w.nao
    return w.scene("混乱と焦燥",
            nao.be(w.stage.myroom, w.day.schoolday),
            nao.look().d("その日は家に帰ってからずっと目の前に靄が掛かったみたいで",
                "夕食後は風呂に入るのも忘れたままベッドの上で眠ってしまっていた"),
            nao.look().d("目覚めると電気は点き", "窓も開けたままで",
                "ずっと扇風機が首を振っていた"),
            nao.feel().d("寝汗なのかもっと別の汗なのか分からないが",
                "湿気ったシャツが肌に密着している。",
                "額を拭うと前髪も張り付いているのが分かった"),
            nao.think().d("はぁ……。",
                "という溜息が", "今までに吐き出したどのそれよりも重い"),
            nao.look().d("電源を切っておいた机のスマートフォンを手にして脇のボタンを長押しすると",
                "ゆっくりと画面が明るくなり", "やがてロゴが表示され", "それは見慣れた$st_stlibraryの写真に切り替わる。",
                "普通の書架と違い",
                "$i_designerという著名な建築家による弧を描く緩やかにカーブしたそれは",
                "三階まで吹き抜けになった空間を取り囲み",
                "三百六十度が本で埋め尽くされているという感覚に陥るそうだ。",
                "ここは$meが人生で一度は訪れておきたい場所の一つだった"),
            nao.deal().d("しばらくその画面を見つめていたけれど",
                "危惧していた彼女からのＬＩＮＥの通知はなかった"),
            nao.look().d("$tamuraから同じバスケ部の奴が告白されて付き合うことにしたらしいけど今からってどうなんだろう",
                "という特に返事を期待されていないメッセージがあったが",
                "夜中の三時過ぎということもあって何もしないまま閉じた"),
            nao.think().d("シャワーでも浴びてくるかと思ってベッドから起き上がろうとする"),
            nao.look().d("その視線に",
                "枕元に置いていた$herbookが入った"),
            nao.have().d("引き寄せて", "ページを開く。",
                "誰かに読ませる為ではなく",
                "自分にケジメをつける為の物語。",
                "これを彼女がそのつもりで書いたのだろうか"),
            nao.think().d("第一巻は寄宿学校の生活と旧校舎の別館にある秘密の図書室",
                "そこで夜な夜な本の霊が集まって行っているお茶会を主人公が目撃してしまい",
                "後日受け取った小さい頃に亡くなった幼馴染からの招待状を使って",
                "そのお茶会に参加するようになり",
                "幼馴染と再会するところまでが描かれている"),
            nao.think().d("第二巻では一巻の途中で幾つか起こっていた主人公だけが気づくことのできた不可思議な出来事を",
                "他の生徒たちも目撃するようになり",
                "それは学校の亡霊騒動として話題にされる。",
                "主人公はお茶会で出会う幼馴染がどうやらその騒動に関連していると知り",
                "徐々にその存在とお茶会という世界に疑問を抱くようになる"),
            nao.think().d("三巻以降の内容は分からない。",
                "大きな物語の流れでいえば主人公と幼馴染の思いの行き違いみたいなものが描かれるのかなと思って読んでいるけれど",
                "見え隠れする謎の男性の正体が気になるし",
                "今の状態に疑問を持ちながらも学生生活に馴染もうとしている主人公の気持ちの揺れ動く様は",
                "読んでいて何より共感してしまう"),
            nao.think().d("ただそれはあくまで物語の中の話だ"),
            nao.talk().t("あぁ……"),
            nao.think().d("昨日の$n_anzuの体温を思い出して",
                "何とも言えない気持ちが蘇る"),
            nao.think().d("自分には単なるフィクションの中の出来事でしかなかった恋愛が",
                "実はすぐ傍に転がっていたなんて知らなかった"),
            nao.deal().d("耳を塞いでもそこに$n_anzuの声が届くような気がして",
                    "$meは逃避する為に本棚から適当な文庫本を取り出して読み始めた"),
            nao.think().d("本の世界はいつだって$meを拒否しない。",
                    "どこにだって連れていってくれるし",
                    "辛いことや悲しいことも忘れさせてくれる。",
                    "それに何より",
                    "人生に大切なものを教えてくれる",
                    "もの云わぬ先生だと思っている"),
            nao.think().d("$meは$herbookから何を教わったのだろう"),
            )

def sc_fanletter(w: wd.World):
    nao, saya = w.nao, w.saya
    return w.scene("ファンレター",
            w.nao.know(w.i.her_reason),
            w.nao.meet(w.saya),
            w.nao.ask(w.i.her_reason),
            ).omit()

def sc_knownclub(w: wd.World):
    nao, dad, mam = w.nao, w.dad, w.mam
    return w.scene("真夜中の読書同好会のこと",
            nao.be(w.stage.dyning, w.day.reading),
            nao.look().d("翌朝の食卓には父親が出張先の信州で買ってきた野沢菜漬けが三種類",
                "小さな器に入れて置かれていた"),
            mam.talk().t("今年のお盆はうちのお祖父ちゃんたちのお墓だけで勘弁してもらおうと思ってるんだけど",
                "$fn_nao", "あんた確か三日ともバイト入れてたわよね？"),
            nao.talk().t("え、うん。",
                "なんか人手が足りないらしくて入ってくれって$sanaeに頼まれて"),
            nao.look().d("箸で取ってご飯の上に乗せたものは赤いものが混ざっていて",
                "口に入れるとピリ辛な甘さを感じる"),
            mam.talk().t("お父さんも一日しか休み取れないって言うし",
                "これじゃあ$me一人でお墓行くしかないじゃない"),
            nao.look().d("不満げに$meと父を見やったが",
                "そう言われてもどうしょうもない"),
            mam.talk().t("$meも仕事出ようかしら"),
            nao.look().d("その言葉に綺麗に三種類をそぼろのようにご飯の上に盛り付けた父と目を合わせたが",
                "小さく首を横に振ったので",
                "何も言わずに自分のご飯を掻き込んだ"),
            nao.ask().t("そういえば父さんてうちの高校通ってたんだっけ？"),
            dad.talk().t("一応卒業生だぞ"),
            nao.talk().t("もうその頃には今の校舎だった？"),
            nao.think().d("十五年前に旧校舎は解体された。",
                "自分の三歳の頃の記憶なんて何も思い出せないが",
                "流石に父さんたちは何か覚えているだろう"),
            mam.talk().t("今と同じ校舎に決まってるじゃないの"),
            nao.look().d("答えようと箸を置いた父との間に簡単に割って入った母は",
                "夕食の残りのシシャモを二つに割って口に入れつつ続きを話す"),
            mam.talk().t("そもそも前の校舎だって結構長い間壊すだ壊さないだやってたのよ。",
                "お父さんも知ってるでしょ？",
                "一時期役場前で反対デモやってる人が出てたこと"),
            nao.think().d("昨日資料室で見た反対運動のことだと直感した"),
            dad.talk().t("$meが中学の頃からだからかれこれ十年くらい揉めてたんじゃないかな。",
                "特に古典の$ln_yamamoto先生がそのデモ隊の中心だったっていうから",
                "普段穏やかに見えるのに人ってのは分からないものだなって",
                "それを知った時は思ったよ"),
            nao.ask().t("$ln_yamamotoって？"),
            nao.think().d("思い出す限りではそんな名字の先生はいない"),
            dad.talk().t("ああ、もう何年か前に定年してるはずだ。",
                "ちょっと変わったところのある先生だったから今いる先生の誰かは知ってるかも知れないけど……$n_yamamoto先生。",
                "気になるんだったら担任にでも訊いてみればいい"),
            nao.think().d("$ln_yamamoto……$fn_yamamoto。",
                "その名を繰り返すうちにそれは自然と彼女の名前",
                "$n_sayaへと変化していた"),
            nao.ask().t("あのさ",
                "その$ln_yamamoto先生ってまだこの町に住んでるの？"),
            nao.look().d("$meの質問に父も母も揃って首を傾げた"),
            )

def sc_goagain(w: wd.World):
    nao, anzu, saya = w.nao, w.anzu, w.saya
    return w.scene("再び彼女の家に",
            nao.go(w.stage.bus, w.day.reading).d("その日の午後",
                "$meは再び$sayaの家に向かうバスの車内にいた"),
            nao.look().d("今日は$me以外の乗客はなく",
                "外から見ればまるで貸し切りのように見えるかも知れないが",
                "とてもそんな乗り心地の良い気分ではなかった"),
            anzu.talk().t("え？",
                "急に何なのよ。",
                "$ln_rekishi先生の連絡先が知りたい？"),
            nao.deal().d("昨日のことを気にしながらも思い切って$anzuに電話を掛け",
                "今いる教師の中で一番の古株だという$ln_rekishiの電話番号を聞き出した。",
                "奥さんの実家だという茨城県にいたけれど",
                "先生は丁寧に$n_yamamotoについて教えてくれた"),
            nao.think().d("$ln_yamamoto先生は本や古いものを愛する", "生徒たちに人気の教師だったそうだ"),
            nao.think().d("放課後には彼女のところに生徒が集まって",
                "よくお茶会みたいなことが行われていた。",
                "中でも旧校舎の隣にあった図書室は彼女のお気に入りで",
                "そこに集まって好きな本や作家について語り合うのがいつしか『$i_oldclub』と呼ばれるようになり",
                "$ln_yamamoto先生はそれを同好会にしてしまったそうだ。",
                "名前に”真夜中”と入っているのも別に夜中に集まっていた訳ではなく先生の名前が「$fn_yamamoto」だからということだけらしい"),
            nao.think().d("この辺りの経緯は$anzuから聞いたものと多少違っていた。",
                "$ln_rekishi先生がそう間違った話をするとも思えないから",
                "おそらくこちらの方がより事実に近いのだろう"),
            nao.think().d("校舎の建て替えが決まり", "彼女は図書館だけは何とか町の文化財として残せないかと試みたのだけれど",
                "結果は$meも知る通り", "今では見事な野原に変わり果てていた"),
            nao.think().d("その際のデモ運動の件がずっと尾を引いて",
                "将来校長になるという話も消えてしまい",
                "定年を待たずに高校も辞めてしまったそうだ"),
            nao.think().d("今でも同じ住所だったと思う",
                "と言われて耳にしたそれは",
                "$n_sayaのものと同じだった"),
            nao.look().d("$meは先日と同じバス停で降りて",
                "今度は表札に『$ln_saya』を探すことなくそこに辿り着く"),
            nao.look().d("家の前には長い荷台のあるトラックが停まっていて",
                "青い制服姿の作業員が二人",
                "忙しなく出たり入ったりしていた"),
            nao.deal().d("$meはその脇を抜け",
                "開けられたままの玄関まで近づくと", "緊張気味に「すみません」とインタフォンを押そうとした。",
                "その時だ"),
            saya.ask().t("何か？"),
            nao.look().d("背中から声を掛けられ振り返ると",
                "そこにはこの前とは打って変わって綺麗に着飾った$n_sayaが",
                "眼鏡のない瞳を大きくして$meを見ていた"),
            )

def sc_getlastbook(w: wd.World):
    nao, saya, anzu = w.nao, w.saya, w.anzu
    return w.scene("最後の作品",
            nao.come(w.stage.herroom).d("拒否されるかと思ったが",
                "$sayaは意外なほど快く中に入れてくれた"),
            nao.look().d("案内されたのは彼女の部屋だと紹介されたこの前とは別の和室で",
                "そこには空っぽの本棚と幾つか壁に寄せて置かれた段ボール箱だけがあった"),
            nao.ask().t("これって……"),
            saya.talk().t("ここを出ていくことになって"),
            nao.look().d("眼鏡を掛けていないからか",
                "それとも淡い桜色のロングのワンピース姿がとても似合っているからか",
                "部屋に仄かなラベンダーの香りが漂っていたからか",
                "この前よりもずっと優しい表情を$meに向けてくれたからか",
                "正座の上に置いた自分の拳をぎゅっと握りながら彼女に対して俯いた"),
            saya.talk().t("結婚をね", "するの"),
            nao.think().d("え……"),
            nao.look().d("顔を上げて$sayaを見ると",
                "小さく顎を動かす。",
                "ただ目を細めたその顔に", "目元に小さくできた皺に",
                "不思議と幸福感が見えない"),
            nao.think().d("結婚という言葉から次の「するの」までの", "僅かな間が彼女にとってどんな意味を持っていたのか知らないけれど",
                "この前読まれたくて書いた訳じゃないと作品について語ったその気持ちとはまた別の意味で",
                "$meにはそれを伺い知ることが出来なかった"),
            nao.talk().t("表のトラックがそうなんですね。",
                "今日", "出て行くんですか？"),
            saya.talk().t("この家をどうするかは分からないけれど",
                "向こうの方がなるべく早い方が良いと言ってくれるものだから"),
            nao.think().d("向こうの方",
                "というのはその結婚相手のことなのか", "その相手の家族なのか",
                "もっと別の$meがよく分からない事情なのか", "分からない"),
            nao.think().d("ただそこに特別な何かがあるのだろうということが",
                "推察できるだけだ"),
            nao.ask().t("実は今日来たのは"),
            saya.talk().t("おめでとう"),
            nao.ask().t("え？"),
            saya.talk().t("おめでとう", "とはやはり言ってくれないのね"),
            nao.talk().t("いやあのその……"),
            nao.behav().d("突然言われて$meはしどろもどろになる"),
            nao.think().d("きっと顔は耳まで真っ赤になっているだろう。",
                "けれどそんな風に言われてもまだ心の中から「おめでとう」とは湧き出てこない。",
                "口にしたのは、"),
            nao.talk().t("すみません"),
            saya.talk().t("前にここに来てくれた時も思ったんだけれど",
                "$asakawaて正直で損をするタイプだよね"),
            nao.look().d("また気分を害したのかと思ったけれど",
                "$sayaの表情は明るい。",
                "口元に手をやり", "クスリ", "と笑っている"),
            nao.talk().t("損するタイプに見えるんですね……やっぱり"),
            nao.think().d("それは$tamuraからも$anzuからもよく言われることだった"),
            saya.talk().t("そう見えるんじゃなくて",
                "実際にそうだからよ。",
                "こういう時に嘘でも相手におめでとうって言ってあげられる方が",
                "人生ってずっと上手くやりくり出来る。",
                "$meもね",
                "そういうのが苦手な正直者だから"),
            nao.look().d("一度目を合わせてから照れたように口元を歪めると",
                    "彼女は「お茶くらいしかないけど」と言い残して部屋を出ていく"),
            nao.look().d("一人で部屋に残されている間に二度",
                    "作業員の人が顔を出したが",
                    "人違いだと思ったのか",
                    "何も聞かずに行ってしまった。",
                    "たぶんこの部屋に残る物を運び出さなければいけないのだろう"),
            nao.look().d("本棚は年代物で",
                    "背板にシミでもあるみたいにして色違いの部分が出来ていた。",
                    "置いてあった場所や並べていた本の加減だろう。",
                    "日に焼けたところだけが色が濃いのだ"),
            saya.talk().t("ペットボトルのままで悪いけれど"),
            nao.look().d("そう言って戻ってきた彼女は",
                    "五百ミリのスマートなお茶のボトルを手渡してくれた"),
            nao.talk().t("ありがとうございます"),
            nao.deal().d("少し汗を掻いたそれを手にして", "キャップを捻る"),
            nao.look().d("唸るように音を立てて半分くらい一気に飲み干す間に",
                    "$sayaは前に座って足を横に出す。",
                    "彼女はボトルを開封しないまま右手で持って",
                    "ぼんやりした視線をそこに落としながら「それで？」と",
                    "口元を拭った$meを見た"),
            saya.talk().t("やっぱり本の続きが読みたいから",
                    "また訪ねてきたの？"),
            nao.think().d("それもある。",
                    "けれど今は本の中身より$sayaの気持ちを知りたかったし",
                    "ここへ来て更に強く",
                    "知りたくなった"),
            nao.ask().t("$sayaのお母さんの名前は$n_yamamotoですか？"),
            nao.look().d("唐突に自分の母親の名を出されたことに驚きつつ",
                    "彼女は「ええ」と答えた"),
            nao.talk().t("実は高校で入っている同好会で”$i_oldghost”について調べていて",
                    "かつて旧校舎取り壊しの反対運動の中心的人物に$n_yamamotoさんがいたと聞いて",
                    "それで何か事情を伺えるかと思って来たんです"),
            saya.talk().t("ああ、そう。",
                    "じゃあ$meじゃなくてお母さんの方に用だった訳か"),
            nao.talk().t("いえ。",
                    "お話を訊きたいのは$saya", "あなたの方です"),
            nao.look().d("何故？", "と彼女は目元を細める"),
            nao.talk().t("まず最初にお聞きしたいのは$sayaはうちの学校",
                    "つまり$st_schoolの出身ですか？"),
            nao.look().d("彼女は眉を寄せたまま首を横にする"),
            nao.talk().t("まだ$herbookを二巻までしか読んでいないので確信はないんですが",
                    "本の中で『$i_oldghost』についての記述が出てきます。",
                    "第一巻の六十八ページ", "あるいは第二巻の三十五ページ等です"),
            saya.talk().t("小説の話をしに来たの？"),
            nao.talk().t("実はうちの両親は$i_oldghostについて聞いたことがないと言ってたんです"),
            nao.look().d("$meを見る彼女の目には",
                    "もうからかうような色は見られなかった。",
                    "いつの間にか足を寄せて正座になり",
                    "真っ直ぐに$meと向き合っている"),
            saya.talk().t("その$i_oldghostというのは今",
                    "あなたの学校ではどんな話として伝わっているのかしら"),
            nao.talk().t("例えば放課後", "誰もいない校庭でサッカーボールだけが動いているとか",
                    "一人で教室に残っていると誰か知らない生徒が通って声を掛けていくけれど振り向いた瞬間に消えてしまうとか",
                    "日が暮れるまで図書室に残っていると勝手に鍵が閉まっていたとか。",
                    "その手のよくある学校の七不思議的怪談ですよ"),
            nao.think().d("この言葉があるからか", "うちの高校には七不思議と呼ばれるものが存在しなかった。",
                    "どこにでもあると思っていたものが無いと一年の時に$anzuに言われて",
                    "微かな違和感を覚えたことを思い出した"),
            saya.talk().t("よくある話に", "ちょっと違う名前が付いているだけのことじゃないのかしら"),
            nao.talk().t("確かに$i_oldghostという言葉そのものは偶然の一致とかで済ませられる問題かも知れません。",
                    "けど旧校舎の別館になった図書室や学校が消えるという話からは",
                    "これが$st_schoolをモデルにしていると考えた方が筋が通ります"),
            nao.think().d("ただそれだけなら",
                    "下調べをしてそういう話があったから書いた", "で済む"),
            nao.look().d("けれど彼女は口元に手を当てて少し考える素振りを見せると",
                    "「ちょっと待ってて」と言って壁際に重ねた段ボール箱の中を調べ始めた"),
            nao.ask().t("何ですか？"),
            nao.think().d("$i_oldghostのことなんかのメモを取った創作ノートでも見せられるのかと思ったが",
                    "彼女がそこから取り出したのは$st_bookshopから引き上げてきた$herbook",
                    "その全七巻だ"),
            nao.look().d("三度に分けて取り出された少しずつ色味が異なる柄の表紙に『$herbook』とローマ数字で１から順に番号が振られている"),
            saya.talk().t("$asakawaが何をそんなに拘っているのかは知らないけど",
                    "こんな中途半端なものにそんな大した意味も何もないわよ"),
            nao.look().d("彼女は首を横に振り", "その七冊を$meの前に並べた"),
            saya.talk().t("あなたに売ることはできない。",
                    "けど", "荷物の運び出しを終えて$meがこの家から消えてしまうまでの僅かな時間",
                    "ここに置いておくわ。",
                    "どうするかはあなたの自由よ", "$nao"),
            nao.look().d("$sayaはそれだけ言うと立ち上がり",
                    "廊下に出て作業員を呼びつける。",
                    "入ってきた制服の二人は本棚と残りの段ボールを次々に運び出した"),
            nao.think().d("部屋には$meとペットボトルのお茶",
                    "目の前に並べられた七冊の$herbookだけが残された"),
            nao.deal().d("少し待ってみたけれど彼女が戻ってくる気配はなく",
                    "相変わらず$n_sayaの思考が読めないまま",
                    "それでも続きが読みたいという欲求が$meの手を三巻に向けていた"),
            nao.look().d("折り目も何もついていない真新しいそれの",
                    "表紙を捲る。",
                    "折らないよう", "癖をつけないように注意しながら",
                    "タイトルと彼女の著者名が書かれた簡素な扉ページを次へと送る"),
            nao.look().d("目次を見れば今までと同じく",
                    "メインの章の間に挿話として主人公とは別人物の視点からの話が組み込まれているのがタイトルから分かる。",
                    "ロンドという言葉を引いてみて知ったのだけれど",
                    "どうやらこれは音楽のロンド形式に擬えたものらしい"),
            nao.look().d("次のページには主要な登場人物の名前が書かれていて",
                    "主人公の$n_bookheroと親友であり幽霊でもある$n_bookrivalについては簡易の自己紹介文が添えられていた"),
            nao.look().d("更にページを捲る"),
            nao.think().d("時間があまりないことを考えて",
                    "いつもなら冒頭からじっくりと頭の中で復唱するように読み返しながら進めていくところを",
                    "重要なワードだけを拾って次々とページを駆け抜ける"),
            nao.think().d("三巻では今まであまり目立っていなかった謎の男性についてクローズアップされていた"),
            nao.think().d("$fn_bookheroが真夜中に宿舎を抜け出し旧校舎の図書室に行っていることがその男性にバレてしまうが",
                    "何故か彼はそれについて黙っていてくれると言う。",
                    "ただし条件があり", "$fn_bookheroにその図書室に眠る『$herbook』と呼ばれる本を見つけて持ち出して欲しいと依頼される"),
            nao.think().d("四巻ではその彼が寄宿学校の理事長の息子と判明し",
                    "学校に売却の話が持ち上がっていることや旧校舎と図書室の解体の話が登場する。",
                    "どうやら以降は親友との話ではなくこの理事長の息子と旧校舎解体の話を中心に展開していくようだった"),
            nao.have().d("どれくらい読書に没頭していたのだろう。",
                    "手に取ったペットボトルはすっかり中身が空になっていて",
                    "あと一冊でひとまずここにある七巻は読み終えられるというところまで来たが",
                    "流石に頭の中で読み飛ばした物語がごちゃごちゃになっていた"),
            saya.talk().t("つまらなかったでしょう？"),
            nao.look().d("$meが一息ついて七巻に手を伸ばしたところで",
                    "彼女が戻ってきた"),
            saya.talk().t("その巻は読む必要はないわ。",
                    "だってそれは作品じゃなく",
                    "ただの作者の愚痴でしかないから"),
            nao.look().d("そう口にして寂しげな微笑を向けた$sayaは",
                    "目の前に並ぶ七冊の和綴じの本を丁寧に拾い上げると",
                    "$meに外に出るように言った"),
            nao.ask().t("あの"),
            nao.move().d("玄関を出るまでずっと黙っていたが",
                    "もうここしかないと思い", "声を上げた"),
            saya.talk().t("本なんていくらでもある。",
                    "この町から本屋や図書館が消えても",
                    "いくらでも手に入れる方法はある。",
                    "だからあなたもいつまでもつまらない元作家の同人誌なんかに拘っていないで",
                    "もっと他の好きな物語を探しなさい"),
            nao.talk().t("他の好きって何ですか？",
                    "二番目や三番目のことですか？"),
            nao.look().d("彼女は玄関の鍵を掛けようとしたその手を", "止めた"),
            nao.talk().t("$sayaは$herbookの主人公と同じように",
                    "一番大切に思っていた親友を諦めて",
                    "本の霊たちの憩いの場を壊す側になろうと言うんですか？",
                    "それが他の好きを大切にすることですか？",
                    "それこそがあなたがこの物語で一番伝えたかったことなんですか！"),
            nao.look().d("彼女はそれに答えないまま鍵を掛けると",
                    "いつまでも動き出そうとしない$meを置いて",
                    "赤い色をした軽自動車に乗り込んだ"),
            nao.hear().d("エンジン音がして", "運転席の窓が少しだけ下がる"),
            saya.talk().t("いつかは全部消えてしまうのよ。",
                    "あなたの思いも",
                    "気持ちも",
                    "物語も"),
            nao.look().d("それだけ言うと",
                    "車は出て行く。",
                    "交通量のほとんどない道で",
                    "彼女の乗った軽だけがいつまでも赤く遠ざかった"),
            nao.have("最後の本"),
            nao.know(w.i.oldschool_reason.deflag()),
            )

def sc_alonetown(w: wd.World):
    nao, anzu, akiko = w.nao, w.anzu, w.akiko
    return w.scene("孤独の町",
            nao.move().d("結局何をしに行ったのか分からないまま",
                "徒労感だけを得て帰ってきた$meは",
                "小学校前のバス停で降りて",
                "準備運動をするサッカークラブの少年たちをぼんやりと見ていた"),
            nao.think().d("子供の頃は目の前にあるボールを追うので精一杯だった。",
                "誰が見ているとか",
                "後ろから人が来ているとか",
                "ぶつかって泣いている子がいるとか",
                "そういうものが色々と見えていないことばかりだった"),
            nao.think().d("でもいつしか一歩引いたところから他人を見られるようになって",
                "本当は周囲に色々なものが転がっていたんだって分かるようになる。",
                "何か一つでも気づくことが出来るようになったら",
                "それが大人への階段なのかも知れない"),
            nao.move().d("交差点の方に歩きながら",
                "そんなことを考えた"),
            nao.talk().t("あ……"),
            nao.look().d("シャッターが降りた$st_bookshopの前に",
                "$meの見知った女性が二人",
                "立ち話をしていた。",
                "一人はこの前まで本屋のカウンターに座っていた$akikoで",
                "もう一人は自転車のハンドルを握ったままでいる$n_anzuだった"),
            akiko.talk().t("あら$nao"),
            anzu.talk().t("え……$nao"),
            nao.behav().d("どうしようかと思って横断歩道の前で立っていた$meを目ざとく見つけた$akikoに",
                "ひとまず手を挙げて応えつつも$anzuには申し訳なさそうな顔を向けるしかなかった"),
            nao.talk().t("何か忘れ物でもあったんですか？"),
            akiko.talk().t("そういう訳じゃないんだけど",
                "ちょっとこっちで手続きがあったついでに立ち寄ってみたら",
                "ちょうど$anzuがいてね"),
            nao.look().d("仕方なく横断歩道を渡って二人に近づいた$meを",
                "彼女は口を真一文字にして見つめる"),
            nao.talk().t("もう会えないと思ってましたよ。",
                "そうそう。",
                "この前は助かりました"),
            akiko.talk().t("この前って……ああ", "$n_sayaさん？"),
            nao.behav().d("それに頷きを見せた$meを$anzuは怪訝な顔で見た"),
            akiko.talk().t("$herbook良いお話だと思ったけど",
                "作者本人が引き上げたいって言うんだから仕方ないわよねえ。",
                "でもあんなに楽しみにしてたのに最終巻まで読めなくて残念だったわね"),
            nao.talk().t("$akikoは第七巻", "読んだことあるんですか？"),
            nao.look().d("大きく頷いて語り出そうとした彼女は",
                "慌てて口を押さえた"),
            akiko.talk().t("つい内容言っちゃうところだったわ。",
                "ごめんなさい"),
            nao.look().d("$meは二人の会話に入れないでいる$anzuを横目で見ながらも",
                "$akikoに首を振る"),
            nao.talk().t("いえ", "逆に聞きたいです。",
                "最後がどんな内容だったのか。",
                "そして$sayaの本当に書きたかった結末って何だったのか"),
            anzu.talk().t("$fn_saya", "さん？"),
            nao.talk().t("今ゆっくり説明してる余裕はないんだ。",
                    "悪い"),
            nao.look().d("そう言って手を合わせた$meの脛を蹴りつけると、"),
            anzu.talk().t("$meちょっと用があるんで……それじゃあ$akiko",
                    "また町に寄ったらお話聞かせて下さい"),
            nao.look().d("頭を下げてから$meに一睨み利かせ",
                    "$anzuは自転車に跨って行ってしまった"),
            akiko.talk().t("あらあら。",
                    "ひょっとして$anzuと喧嘩中だった？"),
            nao.talk().t("そういうんじゃないんですけど……まあ色々あって。",
                    "それより最後はどうなるんですか？",
                    "やっぱり図書館が解体されて終わりなんですか？",
                    "ついさっきまで$sayaのところで何とか六巻までは読ませてもらったんです。",
                    "けど時間がなくて肝心の最終巻が見せてもらえなくて"),
            akiko.talk().t("たぶん",
                    "$naoが思っているのとは全然違うんじゃないかな"),
            nao.hear().d("そう言って簡単に説明してくれた第七巻の内容は",
                    "彼女が言い放ったような愚痴でもなければ",
                    "$meが想像していた旧校舎の解体問題とも全く関係のない",
                    "まるで別の物語と言ってしまってもいいものだった"),
            )

def sc_confession(w: wd.World):
    nao, saya = w.nao, w.saya
    return w.scene("杏の気持ちと真実と",
            nao.go(w.stage.myroom, w.day.departing),
            nao.be().d("皿の上にはまだ手をつけていない生姜焼きがぺらんと一枚",
                "キャラメル色の液体に脂を浮かべて載っていた"),
            nao.talk().t("ごちそうさま"),
            nao.deal().d("何とか空にしたご飯茶碗を手に",
                "シンクまで行って水桶に漬けると",
                "口を開けたまま言葉を探している母に小さく頭を下げ",
                "足早に二階の自室に戻った"),
            nao.move().d("ベッドに大の字になって寝転ぼうとして",
                "左手をすぐ脇の勉強机の角に思い切りぶつけてしまった"),
            nao.feel().d("そのあまりの痛みに体をまるめて手を押さえ込みながら涙を堪えていると",
                "やっと自分が本当は何を失ったのかについて理解することが出来た。",
                "いや", "理解出来たような気がしただけだ"),
            nao.think().d("そう。",
                "いつだってもう失われてしまったものに対して出来るのは",
                "思い出してこうだったああだったと自分の願望や後悔を述べることだけだ。",
                "でもそれは事実とは違う。",
                "ただの気持ちだ"),
            nao.think().d("$herbookの最後は",
                "その大部分が長い長い作者からの手紙だった"),
            nao.think().d("それこそが男が探していた",
                "いや探すべきだった$herbookだったのだ"),
            nao.think().d("それを$akikoから聞いた時に彼女が誰かに読んでもらいたいんじゃなくてケジメだったと言った意味を",
                "理解してしまった"),
            nao.think().d("何があったかは全然知らないし",
                "散らばった断片的な情報から勝手に推測するしかない。",
                "けれど一度見つけてしまえばもうそうなんじゃないかとしか$meには思えなくて",
                "その見つけてしまったものの本当の意味に気づいたから",
                "こうして泣いている"),
            nao.feel().d("頬の上を流れていく"),
            nao.think().d("それはきっと",
                "今日や昨日",
                "$n_anzuが感じた涙の味と同じだ"),
            nao.think().d("$sayaがあれを$st_bookshopに置かせてもらったのは",
                "不特定な誰かに読まれることを期待しての行為じゃない。",
                "$akikoの息子さん",
                "つまり$n_ak_sunに見てもらいたかったからだ"),
            nao.think().d("二人がいつ出会い", "どこで$sayaが彼に恋心を抱いたのかは分からない"),
            nao.think().d("ただそれを読んだ彼の母親である$akikoは",
                "”悪いことをしたねえ”と言っていた。",
                "細かい内容は教えてもらえなかったが",
                "そこには自分がどうしてこんな作品を書いたのか",
                "何故わざわざこんな方法で訴えようとしたのか",
                "何より母親の大切な場所だった図書室をどうして壊したのか",
                "その切ない思いが書き綴られていたそうだ"),
            nao.think().d("息子さんが勤めている建築会社が最終的に解体工事を請け負ったと$akikoから聞いたけれど",
                "当時も今も彼にそれをどうこう出来るような権限はないそうだ。",
                "彼女もきっとそれは理解していると思う。",
                "それでもこうして書かざるを得なかったのは",
                "おそらく彼女は彼が絶対に旧校舎を", "特に図書室を壊さない何らかの確信があったからだろう"),
            nao.think().d("そのことについては何も書かれていなかったらしい"),
            nao.think().d("ただ$akikoが言うには",
                    "息子さんが今の建築の仕事に興味を持ったきっかけがあの図書室だったんじゃないか",
                    "ということだった"),
            nao.think().d("それともう一つ", "決定的なことを$meは$akikoから聞いた。",
                    "それは閉店時期が早まったのは息子さんの仕事の配置換えが理由だったのだけれど",
                    "そもそも結婚をして$akikoを引き取ることになったから閉店を決めたのだということだった"),
            nao.think().d("彼女が$meに結婚をしたと言った時の",
                    "幸福とは反対側の寂しさを思い出す"),
            nao.feel().d("今感じているこの気持ちは彼女のそれとは程遠いだろうけれど",
                    "それでも明確に自分でも分かる"),
            nao.think().d("失恋の", "空虚さだと"),
            w.nao.deal("想いを伝えた"),
            # TODO: deflag
            nao.be(w.i.oldghost.deflag()),
            )

def sc_epilogue(w: wd.World):
    nao, anzu, tamura = w.nao, w.anzu, w.tamura
    return w.scene("その後について",
            nao.be(w.stage.classroom, w.day.newschool).d("町から本屋が無くなっても",
                "高校に新学期はやってくる"),
            nao.look().d("まだ八月という暑さの中で",
                "それでも机に齧りつくようにして黒板に書かれた数式を移していた"),
            nao.think().d("あれからずっと",
                "$anzuとの関係は改善を見せていない。",
                "ＬＩＮＥもメールも電話も",
                "答えてもらえないままだ"),
            nao.look().d("教室の後ろ", "廊下側から二番目の席に離れてしまった", "気難しい顔をしてノートを取る$anzuの顔は",
                "どこで焼いてきたのだろうというくらいに黒くなっていて",
                "髪も耳が見えるくらいにはさっぱりしている"),
            nao.think().d("$tamuraからはあれこれと詮索されたけれど",
                "資料室での出来事については何も話していない"),
            nao.think().d("そういえばその$tamuraは夏休みの間にバスケ部の友だちと東京の私大のオープンキャンパスを幾つか回ったそうだ"),
            nao.think().d("まだどの大学に行きたいのかすら分からないまま",
                "何の変化もない自分だけが取り残されているのかも知れない"),
            nao.think().d("いや。",
                "変わったことといえば一つだけあった"),
            nao.think().d("つい昨夜のことだ。",
                "不意に着信音が鳴り",
                "$sayaから写真だけが添付されたメールが送りつけられた。",
                "そこには真っ白なウェディングドレスを着た彼女とタキシード姿の真面目そうな",
                "ちょっとだけ$n_ak_sunさん似の男性が並んで写っていた"),
            nao.think().d("色々なものが変わっていく"),
            nao.think().d("その中には変わらないでいて欲しい",
                "消えないで欲しいと思うものも沢山混ざっていて",
                "けれど否応なく",
                "変わっていってしまう"),
            nao.think().d("$i_oldghostはただの言葉かも知れないけれど",
                "それは誰の心にも存在する",
                "消えて欲しくないものと消えてしまったもののギャップが生み出す亡霊なのかも知れない"),
            nao.have().d("と",
                "マナーモードのスマートフォンが震えた"),
            nao.look().d("見れば$anzuからのＬＩＮＥで",
                "ごめん",
                "と",
                "あとで数学教えて",
                "が表示される"),
            nao.think().d("$meは何て返せばいいのか考えながら顔を上げると",
                "「じゃあ$ln_nao」と先生に指名され",
                "慌てて隠そうとしたスマートフォンを床に落としてしまう。",
                "$meの方を向いたその画面には$st_stlibraryの雄大な書架が映し出されていた"),
            )

# episodes
def ep_intro(w: wd.World):
    return (w.chaptertitle("本屋が無くなる町"),
            sc_myfavorite(w),
            sc_knownews(w),
            sc_checkclosed(w),
            )

def ep_buyout(w: wd.World):
    return (w.chaptertitle("買い占めなきゃ"),
            sc_lazyschool(w),
            sc_gotooldschool(w),
            sc_oldlibmark(w),
            sc_herbook(w),
            )

def ep_working(w: wd.World):
    return (w.chaptertitle("働く日々"),
            sc_findjob(w),
            sc_getjob(w),
            sc_workingman(w),
            )

def ep_closedshop(w: wd.World):
    return (w.chaptertitle("閉店する"),
            sc_holdshop(w),
            sc_reasonhold(w),
            sc_gotoherhome(w),
            )

def ep_lastbook(w: wd.World):
    return (w.chaptertitle("最後の本"),
            sc_meether(w),
            sc_schoolday(w),
            sc_graduate(w),
            )

def ep_remainheart(w: wd.World):
    return (w.chaptertitle("消えても残るもの"),
            sc_confusion(w),
            sc_fanletter(w),
            sc_knownclub(w),
            sc_goagain(w),
            sc_getlastbook(w),
            sc_alonetown(w),
            sc_confession(w),
            )

def ep_epilogue(w: wd.World):
    return (w.chaptertitle("エピローグ"),
            sc_epilogue(w),
            )

# test data
def story_baseinfo(w: wd.World):
    return [
            ("story", story(w), w.nao, w.saya),
            ]

def story_outline(w: wd.World):
    return [
            ]

# main
def world():
    w = wd.World("Lost her book")
    w.set_db(cnf.CHARAS, cnf.STAGES, cnf.DAYS, cnf.ITEMS, cnf.INFOS, cnf.FLAGS)
    return w

def story(w: wd.World):
    return (w.maintitle("彼女の本が、消える町"),
            ep_intro(w),
            ep_buyout(w),
            ep_working(w),
            ep_closedshop(w),
            ep_lastbook(w),
            ep_remainheart(w),
            ep_epilogue(w),
            )

def main(): # pragma: no cover
    w = world()
    return w.build(story(w))

if __name__ == '__main__':
    import sys
    sys.exit(main())


""" Compiled: 2020-09-18 10:38:51 """

#__src_file__ = "extensions/trade_rollout/FTradeRollout.py"
#----------------------------------------------------------------------------
#    (c) Copyright 2020 SunGard Front Arena. All rights reserved.
#----------------------------------------------------------------------------
"""----------------------------------------------------------------------------
MODULE
    FTradeRollout

DESCRIPTION

NOTE
    The modules uses the aggregation rules in...

ENDDESCRIPTION
----------------------------------------------------------------------------"""

import FBDPGui
import importlib
importlib.reload(FBDPGui)

import acm

import FAggruleSelectItem

### Load Default values from FParameters
FBDPGui.DefaultVariables.defaults = FBDPGui.Parameters('FBDPParameters',
        'FTradeRolloutVariables')

# Populate the tradeFilters for selection.
tradeFilters = []
for tf in acm.FTradeSelection.Select(''):
    # Filter out those for aggregation rules (begin with '~AggRule_')
    if not tf.Name().startswith('~AggRule_'):
        tradeFilters.append(tf.Name())

ttDate = 'Rollout date'
ttUseAggRules = 'Use the Aggregation Rules when selecting trades'
ttAggRuleFilters = ('If set, only run the set of aggregation rules defined '
        'by these trade filters. If not set, all aggregation rules will be '
        'used.')
ttTradeFilters = 'Use these Trade Filters when selecting trades'
ttRolloutToAMBA = 'Export to AMBA'
ttRolloutToXML = 'Export to XML'
ttFilePath = 'This file will be created or appended'
ttUseBatching = 'Rollout trades in batches. If set, no validation is performed'
ttMaxBatchSize = 'Maximum number of trades to rollout per batch'
ttMaxRunTime = ('The execution will be terminated after this amount of time '
        'in seconds')

def disable_variables(variables, enable=0, disabledTooltip=None):
    for i in variables:
        getattr(ael_variables, i).enable(enable, disabledTooltip)

def cb(index, fieldValues):
    global ael_variables
    if ael_variables[index][0] == 'useAggRules':
        disable_variables(('aggRuleFilters',),
            fieldValues[index] == '1',
            'Check "Use aggregation rules" to enable this field.')
        disable_variables(('tradeFilters',),
            fieldValues[index] == '0',
            'Uncheck "Use aggregation rules" to enable this field.')

    if ael_variables[index][0] == 'rolloutToAMBA':
        disable_variables(('rolloutToXML', 'useBatching'),
            fieldValues[index] == '0',
            'Uncheck "%s" to enable this field.' % (ttRolloutToAMBA))
        for i, v in enumerate(ael_variables):
            if v[0] == 'useBatching':
                disable_variables(
                    ('maxBatchSize',),
                    fieldValues[i] == '1' and fieldValues[index] == '0'
                )
                break
    elif ael_variables[index][0] == 'rolloutToXML':
        disable_variables(('rolloutToAMBA', 'useBatching'),
            fieldValues[index] == '0',
            'Uncheck "%s" to enable this field.' % (ttRolloutToXML))
        for i, v in enumerate(ael_variables):
            if v[0] == 'useBatching':
                disable_variables(
                    ('maxBatchSize',),
                    fieldValues[i] == '1' and fieldValues[index] == '0'
                )
                break

    if ael_variables[index][0] in ['rolloutToAMBA', 'rolloutToXML']:
        disable_variables(('filePath',),
            fieldValues[index] == '1',
            'Check either "%s" or "%s" to enable this field.' % (
                ttRolloutToAMBA, ttRolloutToXML
            ))

    if ael_variables[index][0] == 'useBatching':
        disable_variables(('maxBatchSize',),
            fieldValues[index] == '1',
            'Check "%s" to enable this field.' % (ttUseBatching))

    return fieldValues

def customDialog(shell, params):
    customDlg = FAggruleSelectItem.SelectAggrulesCustomDialog(params)
    return acm.UX().Dialogs().ShowCustomDialogModal(shell,
            customDlg.CreateLayout(), customDlg)

ael_variables = FBDPGui.TestVariables(
        # [VariableName,
        #       DisplayName,
        #       Type, CandidateValues, Default,
        #       Mandatory, Multiple, Description, InputHook, Enabled]
        ['date',
                'Rollout Date',
                'string', None, None,
                1, 0, ttDate, None, None],
        ['useAggRules',
                'Use aggregation rules',
                'int', [1, 0], 0,
                0, 0, ttUseAggRules, cb, None],
        ['aggRuleFilters',
                'Aggregation filters',
                'int', [], '',
                0, 1, ttAggRuleFilters, None, 1, customDialog],
        ['tradeFilters',
                'Trade Filters',
                'string', tradeFilters, None,
                0, 1, ttTradeFilters, None, None],
        ['rolloutToAMBA',
                ttRolloutToAMBA,
                'int', [1, 0], 1,
                0, 0, ttRolloutToAMBA, cb, None],
        ['rolloutToXML',
                ttRolloutToXML,
                'int', [1, 0], 0,
                0, 0, ttRolloutToXML, cb, None],
        ['filePath',
                'Export file path',
                'string', None, None,
                0, 0, ttFilePath, None, None],
        ['useBatching',
                'Rollout trades in batches',
                'int', [1, 0], 0,
                0, 0, ttUseBatching, cb, None],
        ['maxBatchSize',
                'Maximum batch size',
                'int', None, 500,
                0, 0, ttMaxBatchSize, None, 0],
        ['maxRunTime',
                'Max Execution Time',
                'int', None, 0,
                0, 0, ttMaxRunTime, None, 1])

def ael_main(dictionary):

    import FBDPString
    importlib.reload(FBDPString)
    import FBDPCommon
    importlib.reload(FBDPCommon)
    import FTradeRolloutPerform
    importlib.reload(FTradeRolloutPerform)
    import FBDPCurrentContext

    FBDPCurrentContext.CreateLog('Trade Rollout',
                      dictionary['Logmode'],
                      dictionary['LogToConsole'],
                      dictionary['LogToFile'],
                      dictionary['Logfile'],
                      dictionary['SendReportByMail'],
                      dictionary['MailList'],
                      dictionary['ReportMessageType'])

    FBDPCommon.execute_script(FTradeRolloutPerform.perform_rollout, dictionary)


import torch
import time
import numpy as np

import logger
from arg_parser import arg_parser
from data import get_dataloader
from models import FullModel
import model_utils

def load_model_and_optimizer(opt, num_GPU=None, reload_model=True):
    model = FullModel.FullVisionModel(opt)
    optimizer = []
    for idx, layer in enumerate(model.encoder):
        optimizer.append(torch.optim.Adam(layer.parameters(), lr=opt.learning_rate))

    model, num_GPU = model_utils.distribute_over_GPUs(opt, model, num_GPU=num_GPU)

    model, optimizer = model_utils.reload_weights(
        opt, model, optimizer, reload_model=reload_model
    )

    return model, optimizer

def train(opt, model):
    total_step = len(train_loader)
    starttime = time.time()
    print_idx = 100
    for cur_train_module in [0, 1, 2]:
        for epoch in range(opt.start_epoch, opt.num_epochs + opt.start_epoch):
            loss_epoch = [0, 0, 0]
            loss_updates = [1, 1, 1]

            for step, (img, label) in enumerate(train_loader):

                img = img.to(opt.device)

                if step % print_idx == 0:
                    print(
                        "Epoch [{}/{}], Step [{}/{}] Training Block: {}, Time (s): {:.1f}".format(
                            epoch + 1,
                            opt.num_epochs + opt.start_epoch,
                            step,
                            total_step,
                            cur_train_module,
                            time.time() - starttime,
                        )
                    )

                loss, _ = model(img, n=cur_train_module)
                loss = torch.mean(loss, 0)

                loss = loss[cur_train_module].unsqueeze(0)

                for idx, cur_losses in enumerate(loss):
                    model.zero_grad()

                    if idx == len(loss) - 1:
                        cur_losses.backward()
                    else:
                        cur_losses.backward(retain_graph=True)
                    optimizer[idx].step()

                    print_loss = cur_losses.item()
                    if step % print_idx == 0:
                        print("\t \t Loss: \t \t {:.4f}".format(print_loss))
                    loss_epoch[idx] += print_loss
                    loss_updates[idx] += 1

            logs.append_train_loss([x / loss_updates[idx] for idx, x in enumerate(loss_epoch)])
            logs.create_log(model, epoch=epoch, optimizer=optimizer)

if __name__ == "__main__":
    opt = arg_parser.parse_args()
    arg_parser.create_log_path(opt)
    opt.training_dataset = "unlabeled"

    # random seeds
    torch.manual_seed(opt.seed)
    torch.cuda.manual_seed(opt.seed)
    np.random.seed(opt.seed)

    torch.backends.cudnn.benchmark = True

    # load model
    model, optimizer = load_model_and_optimizer(opt)
    logs = logger.Logger(opt)
    train_loader, _, supervised_loader, _, test_loader, _ = get_dataloader.get_dataloader(opt)
    train(opt, model)
    logs.create_log(model)


import functools
from datetime import datetime, time
import math

class Solution:
    def longestIncreasingPath(self, matrix) -> int:
        _max = 1
        m = len(matrix)
        if m == 0:
            return 0
        n = len(matrix[0])
        dp = [[0 for j in range(n)] for i in range(m)]
        queue = set()
        for i in range(m):
            for j in range(n):
                if i - 1 >= 0 and matrix[i - 1][j] > matrix[i][j]:
                    continue
                if i + 1 < m and matrix[i + 1][j] > matrix[i][j]:
                    continue
                if j - 1 >= 0 and matrix[i][j - 1] > matrix[i][j]:
                    continue
                if j + 1 < n and matrix[i][j + 1] > matrix[i][j]:
                    continue
                dp[i][j] = 1
                queue.add(i * n + j)
        while len(queue) > 0:
            newQueue = set()
            for q in queue:
                i, j = q // n, q % n
                if i - 1 >= 0 and matrix[i - 1][j] < matrix[i][j]:
                    dp[i - 1][j] = max(dp[i - 1][j], dp[i][j] + 1)
                    newQueue.add(j + n * (i - 1))
                if i + 1 < m and matrix[i + 1][j] < matrix[i][j]:
                    dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] + 1)
                    newQueue.add(j + n * (i + 1))
                if j - 1 >= 0 and matrix[i][j - 1] < matrix[i][j]:
                    dp[i][j - 1] = max(dp[i][j - 1], dp[i][j] + 1)
                    newQueue.add(j - 1 + n * i)
                if j + 1 < n and matrix[i][j + 1] < matrix[i][j]:
                    dp[i][j + 1] = max(dp[i][j + 1], dp[i][j] + 1)
                    newQueue.add(j + 1 + n * i)
            queue = newQueue
        return max([max(a) for a in dp])

s = Solution()
startTime = datetime.now()
print(s.longestIncreasingPath([[0], [1], [5], [5]]))
print(datetime.now() - startTime)