Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elementary algorithm
Search
Hirokazu Maruta
September 29, 2021
Science
34
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Elementary algorithm
Hirokazu Maruta
September 29, 2021
More Decks by Hirokazu Maruta
See All by Hirokazu Maruta
encryption
mochisuna
0
130
わかった気になるチューリングマシン
mochisuna
0
70
ssh-dynamic-forward
mochisuna
0
71
ServerlessFramework-Trello
mochisuna
0
38
TechBash Slack Reaction Award
mochisuna
0
51
techbash-clasp
mochisuna
0
100
vuejs-night-publish
mochisuna
0
1.2k
surprise-lt-for-intern-vol-2
mochisuna
0
60
docker-multi-stage-build
mochisuna
0
180
Other Decks in Science
See All in Science
Amusing Abliteration
ianozsvald
1
230
TypeScript で WebAssembly を用いた 型安全なプラグイン設計
nagano
2
570
データベース02: データベースの概念
trycycle
PRO
2
1.2k
医療 LLM ベンチマークの現在地:多面的評価 と日本ローカライズ
analokmaus
1
600
CVPR2026_VGGTとその仲間たち
mickey_0226
0
980
【論文紹介】Is CLIP ideal? No. Can we fix it?Yes! 第65回 コンピュータビジョン勉強会@関東
shun6211
5
2.5k
Snowflake HCLS Meet Upヘルスケアユーザー会紹介
ktatsuya
0
100
「遂行理論の未来」(松島斉教授最終講義記念セッションの発表資料)
shunyanoda
0
930
大黒市で発生した大規模インシデント の ポストモーテムから読み解く、 記憶媒体消去の大切さ
shucho0103
0
210
検索と推論タスクに関する論文の紹介
ynakano
1
250
機械学習 - pandas入門
trycycle
PRO
0
660
先端因果推論特別研究チームの研究構想と 人間とAIが協働する自律因果探索の展望
sshimizu2006
3
960
Featured
See All Featured
Speed Design
sergeychernyshev
33
1.9k
Mind Mapping
helmedeiros
PRO
1
280
Bash Introduction
62gerente
615
220k
30 Presentation Tips
portentint
PRO
1
350
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
How to Talk to Developers About Accessibility
jct
2
370
My Coaching Mixtape
mlcsv
0
170
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Making Projects Easy
brettharned
120
6.7k
Visualization
eitanlees
152
17k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.4k
For a Future-Friendly Web
brad_frost
183
10k
Transcript
ษڧձ
ࣗݾհ https://github.com/mochisuna • ؙాʢ·ΔͨͻΖ͔ͣʣ • Twitter: @mochi_suna • ओʹαʔόʔαΠυΤϯδχΞ •
झຯɿϐΞϊɺϘυήɺΞΠίϯ࡞ʢΧούʣɺϓϨθϯ • ࣗಈԽେ͖ɻख࡞ۀ͖Β͍ • githubɿ @mochisuna
ٕज़໘
ͯͯ
ࠓ·Ͱͷൃද ↑લʑճ ↑લճ
ΤϯδχΞɾɾɾʁ
ͪΐͬͱਅ໘ͳ ༰ʹ͍ͨ͠
ੲͷઐ͔Β࣋ͬͯ͜Α͏ʂ
ΞϧΰϦζϜͷೖ ɾɾɾͷೖ ·Δͨ
͢͜ͱ • ΞϧΰϦζϜɾɾɾʁ • ʮྑ͍ʯΞϧΰϦζϜ • ܭࢉྔ • ޮΑ͘Λղ͜͏ •
ੈքதͰΘΕΔΞϧΰϦζϜ
ΞϧΰϦζϜɾɾɾʁ
None
ΞϧΰϦζϜʢAlgorithmʣ • ʮܭࢉՄೳʯͳ͜ͱΛܭࢉ͢Δɺܗࣜతͳखଓ͖ ͷ͜ͱɺ͋Δ͍ͦΕΛܗࣜతʹදݱͨ͠ͷ • ίϯϐϡʔλʹܭࢉͤ͞ΔͨΊͷʮܭࢉํ๏ʯ
ΞϧΰϦζϜʢAlgorithmʣ • ʮܭࢉՄೳʯͳ͜ͱΛܭࢉ͢Δɺܗࣜతͳखଓ͖ ͷ͜ͱɺ͋Δ͍ͦΕΛܗࣜతʹදݱͨ͠ͷ • ίϯϐϡʔλʹܭࢉͤ͞ΔͨΊͷʮܭࢉํ๏ʯ 🤔🤔🤔
ॱ൪ʹ۷ΓԼ͍͛ͯ͘
ͦͦ
ίϯϐϡʔλ͓όΧ͞Μ ʘͳΜͩͱʔʗ ʘ͔ʹ͢Μͳʔʗ
ίϯϐϡʔλ͔֬ʹ͍͢͝ • ͍͢͝ܭࢉೳྗ • Կԯ×Կԯͷܭࢉ͕ਖ਼͔֬ͭߴ • ͍͢͝هԱྗ • ԿઍɺԿສͷΛਖ਼֬ʹهԱͰ͖Δ ʘ͑ͬΜʗ
ʘͲ͊ʗ
Ͱίϯϐϡʔλ͓όΧ͞Μ • ࣗྗͰߟ͑ΒΕͳ͍ • ՝ΛղऍͰ͖ͳ͍ • ʮϓϩάϥϜࢥͬͨ௨Γʹಈ͔ͳ͍ɻʯ ʮॻ͍ͨ௨Γʹಈ͘ʯ ʘOh…ʗ ʘͦΕ܅ͨͪͷࣄ͞ʗ
۩ମతͳྫͰߟ͍͑ͯ͜͏
• Q͞Μ3ʹҰɺఆظతʹπΠʔτ͠·͢ɻ • Q͞Μ3ͷഒͷྸͷ࣌ʹඞͣ1ճ͚ͩπΠʔτ ͠ɺͦΕҎ֎ͷྸͷ࣌Ұ͠·ͤΜɻ • ͰɺQ͞ΜಛఆͷAࡀ͔ΒBࡀ·ͰͷؒʹԿճπ Πʔτ͢ΔͰ͠ΐ͏͔ʁ
͜ͷ··Ͱ ίϯϐϡʔλͰ ॲཧͰ͖ͳ͍ ʘʁʁʁʗ ʘʁʁʁʗ
PCͰॲཧͰ͖ΔΑ͏ʹཧ • A,BΛఆٛ • A≦ i ≦B Λຬͨ͢ i ͷதͰ3ͷഒ͕͍ͭ͘
͋Δ͔Λܭ্͠ͳ͍͞ ྫɿA=10ࡀ, B=25ࡀɹˠɹ5ճ πΠʔτ º º ̋ º º ̋ º º ̋ º º ̋ º º ̋ º ྸ
ϓϩάϥϜʹམͱ͠ࠐΉ sum := 0 FOR i := A; i <=
B; i++ IF i%3 == 0 sum++ END END print(sum)
͜͜·Ͱͬͯ ॳΊ͕ͯղ͚Δ ʘ͜ͷϓϩάϥϜͰ͍͍ͷʁʗ ʘ͜ΕΛܭࢉ͢Ε͍͍ͷͶʁʗ
ΞϧΰϦζϜ
ΞϧΰϦζϜ • ίϯϐϡʔλʹܭࢉͤ͞ΔͨΊͷʮܭࢉํ๏ʯ • ʮͲ͏ܭࢉͤ͞Δ͔ʯͷखॱ ʘܭࢉʗ ʘͤͯʂʗ
ݱ࣮ͷΛ Ͳ͏ͬͯϓϩάϥϜʹ མͱ͠ࠐΉ͔
͜Ε͕େࣄ
ࠓճΞϧΰϦζϜͷྫ͔Β ͦͷੌ͞ͱԞਂ͞ʹ ͪΐͬͱͰ͍͑ͨ
͋Μ·͍͠ ༻ޠͱ͔֓೦ Θͳ͍Α͏ʹؤுΔ ʢP vs NPͱ͔ʣ
ʮྑ͍ʯΞϧΰϦζϜ
ΞϧΰϦζϜʹʮղ͖ํʯ • ޮͷྑ͍ղ͖ํɾѱ͍ղ͖ํ͕͋Δ • ͪΐͬͱݟͯΈΑ͏ • https://www.toptal.com/developers/ sorting-algorithms
ॲཧޮ͕શવҧ͏
ޮͷʮྑ͍ʯ ΞϧΰϦζϜ͕ ༏Ε͍ͯΔ
None
PCͷੑೳ͕ 10ഒɺ20ഒʹͳΕ ؔͳ͍ΑͶʂ ʘͤͳʗ ʘͦΕͳʗ
೦
۪ͳΞϧΰϦζϜͰ PCͰղ͚ͳ͍͕͋Δ ʘ͑ͬʗ ʘ͑ͬʗ
८ճηʔϧεϚϯ
८ճηʔϧεϚϯ • Ұ൪গͳ͍ҠಈίετͰɺશͯͷՈΛͪΐ͏Ͳ ̍ճ͚ͩ๚͠ձࣾʹͬͯ͘Δ • NݸͷՈ͕͋Δ߹N!௨ΓͷΈ߹Θͤ
ϐϯͱ͜ͳ͍ɾɾɾɻ • N=̑ͷ߹ɿ120௨Γ • N=10ͷ߹ɿ3628800௨Γ • N=15ͷ߹ɿ1.3*1012௨Γ • N=20ͷ߹ɿ2.4*1018௨Γ •
N=100ͷ߹ɾɾɾʁ
Έ߹Θͤരൃ • 1ؒ = 31536000ඵ ≒ 3.2*108ඵ • 1GHzʹඵؒ1.0 *
109ճͷԋࢉ • 3.2*108 × 1.0*109 = 3.2 * 1017
Έ߹Θͤരൃ • 1ؒ = 31536000ඵ ≒ 3.2*108ඵ • 1GHzʹඵؒ1.0 *
109ճͷԋࢉ • 3.2*108 × 1.0*109 = 3.2 * 1017 N=20ʢ2.4*1018ʣͰ͢Β 10ۙ͘ճͯ͠ղ͕ग़ͳ͍
ޮͷʮྑ͍ʯΞϧΰϦζϜ ͕ ٻΊΒΕ͍ͯΔ
ޮͷʮྑ͞ʯ ʮܭࢉྔʯ
ܭࢉྔ • ϓϩάϥϜͷ࣮ߦ։͔࢝Βऴྃ·Ͱʹ͔͔Δ ࣌ؒʢۭؒʣΛධՁ • େࡶʹͲͷ͘Β͍͕͔͔࣌ؒΔͷ͔ • ࣮༻Ͱେࣄ • ೖྗͷݸͷൣғΛมͱ͢Δ
ܭࢉྔͷྫɿ1ॏϧʔϓ sum := 0 FOR i := 0; i <
N; i++ sum += i END ճ࣮ߦ /ճ࣮ߦ
ܭࢉྔͷྫɿ1ॏϧʔϓ • sum, i ͷએݴɾॳظԽɿ1ճ • “i < N”, “sum
+= i”, “i++”ɿ Nճ • ૯ܭࢉɿ3N + 3ճ sum := 0 FOR i := 0; i < N; i++ sum += i END ճ࣮ߦ /ճ࣮ߦ
ܭࢉྔͷྫɿ1ॏϧʔϓ • sum, i ͷએݴɾॳظԽɿ1ճ • “i < N”, “sum
+= i”, “i++”ɿ Nճ • ૯ܭࢉɿ3N + 3ճ • ܭࢉྔɿO(N) sum := 0 FOR i := 0; i < N; i++ sum += i END ճ࣮ߦ /ճ࣮ߦ Ұ൪Өڹͷڧ͍ มʹൺྫ
ܭࢉྔͷྫɿ2ॏϧʔϓ • sum, i ͷએݴɾॳظԽɿ1ճ • “i < M”, “i++”,
jͷએݴɾॳظԽɿ Mճ • “j < N”, “sum += i * j”, “j++”ɿ M*Nճ sum := 0 FOR i := 0; i < M; i++ FOR j := 0; j < N; j++ sum += i * j ճ࣮ߦ /ճ࣮ߦ
ܭࢉྔͷྫɿ2ॏϧʔϓ • sum, i ͷએݴɾॳظԽɿ1ճ • “i < M”, “i++”,
jͷએݴɾॳظԽɿ Mճ • “j < N”, “sum += i * j”, “j++”ɿ M*Nճ • ૯ܭࢉɿ3MN + 4M + 3ճ • ܭࢉྔɿO(MN) sum := 0 FOR i := 0; i < M; i++ FOR j := 0; j < N; j++ sum += i * j ճ࣮ߦ /ճ࣮ߦ Ұ൪Өڹͷڧ͍ มʹൺྫ
Өڹʹ͍ͭͯิ • 3MN + 4M + 3ʹ͍ͭͯߟ͑Δ ./ ./ ./
. ./ ./ .
ܭࢉྔͷෆࣜ n ͕ेେ͖͍ͱҎԼཱ͕ ෆࣜͷࠨลʹߦ͘΄Ͳߴ log n < n < n
< n2 < n3 < 2n < 3n < n!
ܭࢉྔͷൺֱ
ޮΑ͘Λղ͜͏
͡ΊͷҰาɿ୳ࡧ • ͋ΔσʔληοτAʹ͋Δn͕͋Δ͔ʁ • A = [4,8,23,7,1,9] • n =
7
۪ͳ୳ࡧ • લ͔Βॱʹ୳ࡧ → n = 7ʹҰகͨ͠ΒTRUE O ˣ J
"
۪ͳ୳ࡧ • લ͔Βॱʹ୳ࡧ → n = 7ʹҰகͨ͠ΒTRUE O º ˣ
J "
۪ͳ୳ࡧ • લ͔Βॱʹ୳ࡧ → n = 7ʹҰகͨ͠ΒTRUE O º º
ˣ J "
۪ͳ୳ࡧ • લ͔Βॱʹ୳ࡧ → n = 7ʹҰகͨ͠ΒTRUE O º º
º ˣ J "
۪ͳ୳ࡧ • લ͔Βॱʹ୳ࡧ → n = 7ʹҰகͨ͠ΒTRUE O º º
º ✅ J "
͜ͷ··ͩͱ • Nݸͷσʔληοτͷ߹ɿO(N)ճͷܭࢉྔ • ͕গͳ͚Εྑ͍͚Ͳແବ͕ଟ͍ O º º º º
º º J "
Ͳ͏͠Α͏ʁ
• ॲཧ͢ΔରΛݮΒ͠ޮԽ ·ͣιʔτ O J
" ͔͜͜Βઌ ॲཧෆཁ
• ॲཧ͢ΔରΛݮΒ͠ޮԽ • ͨͩ͠ɺܭࢉྔԼ͕Βͳ͍ ·ͣιʔτ O J
" ͔͜͜Βઌ ॲཧෆཁ
ͬͱޮԽ
• தԝ͔Βܭࢉɿ(5+0)/2 = 2 ೋ୳ࡧ O ˣ J
"
• தԝ͔Βܭࢉɿ(5+0)/2 = 2 • 3 < 7 ͳͷͰࠨͷۭؒΛݕࡧ ೋ୳ࡧ
O ˣ J "
• தԝ͔Βܭࢉɿ(2+0)/2 = 1 ೋ୳ࡧ O ˣ º J
"
• தԝ͔Βܭࢉɿ(2+0)/2 = 1 • 3 < 4 ͳͷͰࠨͷۭؒΛݕࡧ ೋ୳ࡧ
O ˣ º J "
• தԝ͔Βܭࢉɿ(1+0)/2 = 0 • 3 > 1 ͳͷͰଘࡏ͠ͳ͍ ೋ୳ࡧ
O ˣ º º J "
ͬͱڊେͳྫ A = [1,2,…100] , n = 9 1.ɹi=50, A[i]=51
→ 9 < 51ͳͷͰ i = (50 + 0) / 2 2.ɹi=25, A[i]=26 → 9 < 26ͳͷͰ i = (25 + 0) / 2 3.ɹi=12, A[i]=13 → 9 < 13ͳͷͰ i = (12 + 0) / 2 4.ɹi= 6, A[i]= 7 → 9 > 7ͳͷͰ i = (12 + 6) / 2 5.ɹi= 9, A[i]=10 → 9 < 10ͳͷͰ i = ( 9 + 6) / 2 6.ɹi= 7, A[i]= 8 → 9 > 8ͳͷͰ i = ( 9 + 7) / 2 7.ɹi= 8, A[i]= 9 → 9 = 9ͳͷͰ TRUE
ೋ୳ࡧ • ৗʹ୳ࡧۭؒΛʹ͠ଓ͚Δ • ܭࢉྔɿO(log n) d d d d
d d d × n=13 × ×
ಉ͡୳ࡧͰɾɾɾ • ΞϧΰϦζϜҰͭͰѹతʹߴʹͳΔ • ߴͳΞϧΰϦζϜͷݚڀੈքతʹ͞Ε͍ͯΔ
͜͜·Ͱฉ͍ͯօ͞Μ ͜͏ࢥͬͨͰ͠ΐ͏
ʘผʹࣈ୳͠ͱ͔͠ͳ͍͠ʗ
ΞϧΰϦζϜͷੌ͞ ͦ͜͡Όͳ͍
ੈքதͰΘΕΔ ΞϧΰϦζϜ
ྫɿϓϩάϥϛϯάݴޠ • ͦͦͲ͏ͬͯղऍͯ͠Μͷʁ package main import "fmt" func main() {
sum := 0 A, B := 10, 25 for i := A; i <= B; i++ { if i%3 == 0 { sum++ } } fmt.Println(sum) }
ྫɿϓϩάϥϛϯάݴޠ • ࣈ۟ղੳ/ߏจղੳ/AST a = 1 b = 2 if
(b < 3) print(“hoge")
ྫɿϓϩάϥϛϯάݴޠ • ࣈ۟ղੳ/ߏจղੳ/AST a = 1 b = 2 if
(b < 3) print(“hoge") B C JG C UIFO QSJOU lIPHF FMTF QSJOU B ࣈ۟ղੳ
ྫɿϓϩάϥϛϯάݴޠ • ࣈ۟ղੳ/ߏจղੳ/AST a = 1 b = 2 if
(b < 3) print(“hoge") B C JG C UIFO QSJOU lIPHF FMTF QSJOU B CMPDL ม B ԋࢉࢠ ؔ JG Ҿ lIPHFz ೖ ม C ೖ ԋࢉࢠ ؔ UIFO ࠨล C ӈล ؔ QSJOU ԋࢉࢠ ࣈ۟ղੳ ߏ จ ղ ੳ
ྫɿϓϩάϥϛϯάݴޠ • ࣈ۟ղੳɺߏจղੳ/AST a = 1 b = 2 if
(b < 3) print(“hoge") B C JG C UIFO QSJOU lIPHF FMTF QSJOU B CMPDL ม B ԋࢉࢠ ؔ JG Ҿ lIPHFz ೖ ม C ೖ ԋࢉࢠ ؔ UIFO ࠨล C ӈล ؔ QSJOU ԋࢉࢠ ࣈ۟ղੳ ߏ จ ղ ੳ ҙ ຯ ղ ੳ
ྫɿਤɾ࿏ઢܦ࿏ • GoogleMap • Yahoo࿏ઢͳͲ • ໎࿏
• ෯༏ઌ୳ࡧɿBFS / ਂ͞༏ઌ୳ࡧɿDFS • Dijikstra๏ / ϕϧϚϯɾϑΥʔυ๏ • ϫʔγϟϧɾϑϩΠυ๏
࠷ܦ࿏ Start 3 6 8 12 10 3 2 1 0 5 7 4
• ෯༏ઌ୳ࡧɿBFS / ਂ͞༏ઌ୳ࡧɿDFS • Dijikstra๏ / ϕϧϚϯɾϑΥʔυ๏ • ϫʔγϟϧɾϑϩΠυ๏
࠷ܦ࿏ Start 3 6 8 12 10 3 2 1 0 5 7 4 Start 3 6 8 12 10 3 2 1 0 5 7 4
ྫɿϚονϯάΞϓϦ
ϚονϯάΞϓϦ • ײ͔ΒάϥϑΛఆٛ உ
ঁ 2 4 5 5 1 3 6 2 3
ϚονϯάΞϓϦ • ༑͔ΒάϥϑΛఆٛ • ݩͷάϥϑʹෛͷॏΈͰ༗ลΛுΔ
உ ঁ 2 4 5 5 1 3 6 2 3 உ ঁ -2 -4 -5 -1 -3 -6 -2 -3 4 5 -5
• ࠷େྲྀΞϧΰϦζϜ • ݩͷάϥϑͰ࠷େೋ෦Ϛονϯά ϚονϯάΞϓϦ -2 -5 -1 -2 -3
-5 உ ঁ -4 -3 -6 4 5 2 5 1 2 3 5 உ ঁ 4 3 6
ήʔϜ֤छ • ΠϯάϨε • ਞऔΓ • ෦ఆ
࠷େࡾ֯ܗ • NݸͷͰ࡞ΕΔ࠷େͷࡾ֯ܗʁ
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3 4
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3 4
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3 4
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3 4
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3 4
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3 4
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3 4
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3 4
࠷େࡾ֯ܗ • ತ๏ • ׂஔ๏ 1 2 3 4
࠷େࡾ֯ܗ • ࠷େࡾ֯ܗತแΛߏ͢Δʹଘࡏ
࠷େࡾ֯ܗ • ͠Ό͘ͱΓ๏ • ֎ੵ
࠷େࡾ֯ܗ • ͠Ό͘ͱΓ๏ • ֎ੵ
࠷େࡾ֯ܗ • ͠Ό͘ͱΓ๏ • ֎ੵ
ଟ͘ͷղܾͰ ΞϧΰϦζϜʹʮؼணʯ ͞Ε͍ͯΔ
ΞϧΰϦζϜͷੌ͞ ೖྗ͕ఆͰ͋Ε • ͲΜͳέʔεͰ • શ͘ಉ͡ϑϩʔͰ ղ͕ग़Δͱ͜Ζɻ
ΞϧΰϦζϜͷੌ͞ ೖྗ͕ఆͰ͋Ε • ͲΜͳέʔεͰ • શ͘ಉ͡ϑϩʔͰ ղ͕ग़Δͱ͜Ζɻ ̍ͭͷϓϩάϥϜͰ ղܾͰ͖ͯ͠·͏
ΛநԽ͢Δ͜ͱͰ ΞϧΰϦζϜ ྗΛൃش͢Δ
ΞϧΰϦζϜʢ࠶ܝʣ • ίϯϐϡʔλʹܭࢉͤ͞ΔͨΊͷʮܭࢉํ๏ʯ • ʮͲ͏ܭࢉͤ͞Δ͔ʯͷखॱ ʘܭࢉʗ ʘͤͯʂʗ
Α͏ͦ͜ ͘͠ඒ͍͠ ΞϧΰϦζϜͷੈք
࣭ٙԠ • ΞϧΰϦζϜɾɾɾʁ • ʮྑ͍ʯΞϧΰϦζϜ • ܭࢉྔ • ޮΑ͘Λղ͜͏ •
ੈքதͰΘΕΔΞϧΰϦζϜ