Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
PDN-S2
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Robin VAN DE MERGHEL
PDN-S2
Commits
2d0abb66
Commit
2d0abb66
authored
Mar 9, 2023
by
Robin VAN DE MERGHEL
Browse files
Options
Downloads
Patches
Plain Diff
Adding MRP
parent
1b101a67
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
Modeliser Resolution/Exo_Assignment.py
+162
-27
162 additions, 27 deletions
Modeliser Resolution/Exo_Assignment.py
Modeliser Resolution/couple.txt
+8
-8
8 additions, 8 deletions
Modeliser Resolution/couple.txt
Modeliser Resolution/couple2.txt
+85
-0
85 additions, 0 deletions
Modeliser Resolution/couple2.txt
with
255 additions
and
35 deletions
Modeliser Resolution/Exo_Assignment.py
+
162
−
27
View file @
2d0abb66
...
@@ -83,55 +83,190 @@ def generate_random_instance(n, version_number=1):
...
@@ -83,55 +83,190 @@ def generate_random_instance(n, version_number=1):
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
def
generate_random_assignment
(
agencies_choices
,
candidates_choices
):
"""
Returns a random assignment as a 2 tuple of dictionaries.
"""
agenciesAssign
=
{
agency
:
random
.
choice
(
agencies_choices
[
agency
])
for
agency
in
agencies_choices
}
candidatesAssign
=
{
candidate
:
random
.
choice
(
candidates_choices
[
candidate
])
for
candidate
in
candidates_choices
}
return
agenciesAssign
,
candidatesAssign
# ------------------------------------------------------------------------------
def
generate_straight_assignment
(
agencies_choices
,
candidates_choices
):
"""
Returns a straight assignment as a 2 tuple of dictionaries.
"""
agencies
=
list
(
agencies_choices
.
keys
())
candidates
=
list
(
candidates_choices
.
keys
())
agenciesAssign
=
{
agency
:
candidates
[
i
]
for
i
,
agency
in
enumerate
(
agencies
)}
candidatesAssign
=
{
candidate
:
agencies
[
i
]
for
i
,
candidate
in
enumerate
(
candidates
)}
return
agenciesAssign
,
candidatesAssign
def
number_of_non_stable_couples
(
agencies_assign
,
candidates_assign
,
def
number_of_non_stable_couples
(
agencies_assign
,
candidates_assign
,
agencies_choices
,
candidates_choices
):
agencies_choices
,
candidates_choices
):
"""
Returns the number of non stable couples in the assignment.
"""
"""
Returns the number of non stable couples in the assignment.
"""
n
=
len
(
agencies_assign
)
# A non stable couple is as situation where there are two couples : (A,B) and (C,D), and where A prefers C to B and C prefers A to D.
number
=
0
nonStable
=
0
for
i
in
range
(
1
,
n
+
1
)
:
for
agencyName
in
agencies_assign
:
# We get both the agency and the candidate
agencyAssignement
=
agencies_assign
[
agencyName
]
agency
=
f
"
A
{
i
}
"
agency
AssignementIndex
=
agencies_choices
[
agencyName
].
index
(
candidate
=
agencies_assign
[
agency
]
agencyAssignement
)
# Check if the agency choice is the first one, if yes, you can continue
if
agencyAssignementIndex
==
0
:
if
agencies_choices
[
agency
][
0
]
==
candidate
:
continue
continue
# We get the index of the agency in the candidate choices
selectedCandidate
=
agencies_assign
[
agencyName
]
index
=
candidates_choices
[
candidate
].
index
(
agency
)
# We check if the agency is in the first index of the candidate choices
if
index
==
0
:
continue
for
i
in
range
(
agencyAssignementIndex
):
candidate
=
agencies_choices
[
agencyName
][
i
]
candidateAgency
=
candidates_assign
[
candidate
]
candidateAgencyIndex
=
candidates_choices
[
candidate
].
index
(
candidateAgency
)
candidateAgencyRank
=
candidates_choices
[
candidate
].
index
(
agencyName
)
if
candidateAgencyRank
<
candidateAgencyIndex
:
print
(
f
"
Agency
{
agencyName
}
prefers
{
candidate
}
to
{
selectedCandidate
}
and
{
candidate
}
prefers
{
agencyName
}
to
{
candidateAgency
}
.
"
)
number
+=
1
return
number
return
nonStable
n
,
agencies
,
candidates
=
extract_instance_from_file
(
"
./couple.txt
"
)
n
,
agencies
,
candidates
=
extract_instance_from_file
(
"
./couple.txt
"
)
print
(
number_of_non_stable_couples
(
agencies
,
candidates
,
agencies
,
candidates
))
# agenciesAssign, candidatesAssign = generate_random_assignment(
# agencies, candidates)
agenciesAssign
,
candidatesAssign
=
generate_straight_assignment
(
agencies
,
candidates
)
# ------------------------------------------------------------------------------
print
(
number_of_non_stable_couples
(
agenciesAssign
,
def
generate_random_assignment
(
agencies_choices
,
candidates_choices
):
candidatesAssign
,
agencies
,
candidates
))
"""
Returns a random assignment as a 2 tuple of dictionaries.
"""
pass
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
def
gale_shapley_algorithm
(
agencies_choices
,
candidates_choices
):
def
gale_shapley_algorithm
(
O
agencies_choices
,
O
candidates_choices
):
"""
Run the Gale-Shapley algorithm and returns an assignment.
"""
"""
Run the Gale-Shapley algorithm and returns an assignment.
"""
pass
# While not all agencies are assigned
agencies_choices
=
dict
(
Oagencies_choices
)
candidates_choices
=
dict
(
Ocandidates_choices
)
agenciesAssign
=
{}
candidatesAssign
=
{}
n
=
len
(
agencies_choices
)
while
not
len
(
agenciesAssign
)
==
n
:
for
agency
in
agencies_choices
:
if
agency
in
agenciesAssign
:
continue
candidate
=
agencies_choices
[
agency
][
0
]
if
candidate
not
in
candidatesAssign
:
agenciesAssign
[
agency
]
=
candidate
candidatesAssign
[
candidate
]
=
agency
else
:
candidateAgency
=
candidatesAssign
[
candidate
]
candidateAgencyRank
=
candidates_choices
[
candidate
].
index
(
agency
)
candidateAgencyIndex
=
candidates_choices
[
candidate
].
index
(
candidateAgency
)
if
candidateAgencyRank
<
candidateAgencyIndex
:
agenciesAssign
[
agency
]
=
candidate
candidatesAssign
[
candidate
]
=
agency
del
agenciesAssign
[
candidateAgency
]
else
:
agencies_choices
[
agency
].
remove
(
candidate
)
return
agenciesAssign
,
candidatesAssign
def
gale_shapley_algorithm2
(
agencies_choices
,
candidates_choices
):
"""
Run the Gale-Shapley algorithm and returns an assignment.
"""
# While not all agencies are assigned
agenciesAssign
=
{}
candidatesAssign
=
{}
agenciesIndexes
=
{
agency
:
0
for
agency
in
agencies_choices
}
n
=
len
(
agencies_choices
)
while
not
len
(
agenciesAssign
)
==
n
:
for
agency
in
agencies_choices
:
if
agency
in
agenciesAssign
:
continue
candidate
=
agencies_choices
[
agency
][
agenciesIndexes
[
agency
]]
if
candidate
not
in
candidatesAssign
:
agenciesAssign
[
agency
]
=
candidate
candidatesAssign
[
candidate
]
=
agency
else
:
candidateAgency
=
candidatesAssign
[
candidate
]
candidateAgencyRank
=
candidates_choices
[
candidate
].
index
(
agency
)
candidateAgencyIndex
=
candidates_choices
[
candidate
].
index
(
candidateAgency
)
if
candidateAgencyRank
<
candidateAgencyIndex
:
agenciesAssign
[
agency
]
=
candidate
candidatesAssign
[
candidate
]
=
agency
del
agenciesAssign
[
candidateAgency
]
else
:
agenciesIndexes
[
agency
]
+=
1
return
agenciesAssign
,
candidatesAssign
agenciesAssign
,
candidatesAssign
=
gale_shapley_algorithm2
(
agencies
,
candidates
)
for
agency
in
agenciesAssign
:
print
(
f
"
{
agency
}
->
{
agenciesAssign
[
agency
]
}
"
)
# After the algorithm, we can check if the result is stable or not
print
(
"
\n
---------------------
\n
"
)
print
(
number_of_non_stable_couples
(
agenciesAssign
,
candidatesAssign
,
agencies
,
candidates
))
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
def
all_assignments
(
agencies_choices
,
candidates_choices
):
def
all_assignments
(
agencies_choices
,
candidates_choices
):
"""
Returns an iterator on all the possible (stable or not stable)
"""
Returns an iterator on all the possible (stable or not stable)
assigments. Uses the itertools library.
"""
assigments. Uses the itertools library.
"""
import
itertools
# You can use tools from this library
import
itertools
# You can use tools from this library
pass
# Question plus difficile.
agencies
=
list
(
agencies_choices
.
keys
())
candidates
=
list
(
candidates_choices
.
keys
())
def
h
(
i
):
if
i
==
n
:
yield
resultat
else
:
resultat
[
agencies
[
i
]]
=
candidates
[
0
]
yield
from
h
(
i
+
1
)
resultat
[
agencies
[
i
]]
=
candidates
[
1
]
yield
from
h
(
i
+
1
)
resultat
[
agencies
[
i
]]
=
candidates
[
2
]
yield
from
h
(
i
+
1
)
resultat
[
agencies
[
i
]]
=
candidates
[
3
]
yield
from
h
(
i
+
1
)
resultat
=
{
agency
:
0
for
agency
in
agencies
}
yield
from
h
(
0
)
# for assignment in all_assignments(agencies, candidates):
# print(assignment)
This diff is collapsed.
Click to expand it.
Modeliser Resolution/couple.txt
+
8
−
8
View file @
2d0abb66
4
4
A1:C4:C2:C1:C3
A:4:2:1:3
A2:C4:C1:C3:C2
B:4:1:3:2
A3:C1:C2:C3:C4
C:1:2:3:4
A4:C3:C1:C4:C2
D:3:1:4:2
C1:A3:A2:A1:A4
1:C:B:A:D
C2:A2:A1:A4:A3
2:B:A:D:C
C3:A1:A4:A2:A3
3:A:D:B:C
C4:A4:A1:A3:A2
4:D:A:C:B
\ No newline at end of file
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Modeliser Resolution/couple2.txt
0 → 100644
+
85
−
0
View file @
2d0abb66
42
A1:C41:C18:C28:C42:C3:C9:C20:C23:C31:C34:C5:C38:C10:C13:C33:C19:C30:C39:C15:C8:C1:C14:C2:C12:C21:C27:C11:C6:C22:C37:C35:C40:C17:C29:C26:C24:C16:C7:C4:C36:C32:C25
A2:C14:C31:C10:C21:C18:C34:C5:C17:C28:C41:C35:C3:C16:C42:C32:C11:C13:C20:C27:C30:C6:C29:C4:C24:C1:C37:C38:C7:C15:C9:C25:C22:C12:C40:C8:C33:C23:C26:C19:C2:C39:C36
A3:C15:C35:C26:C18:C12:C32:C4:C28:C34:C38:C22:C1:C23:C25:C2:C11:C39:C20:C7:C29:C3:C8:C6:C31:C27:C19:C37:C17:C16:C30:C42:C5:C21:C33:C24:C13:C41:C10:C14:C36:C9:C40
A4:C5:C41:C24:C37:C21:C38:C7:C33:C31:C42:C36:C26:C17:C30:C10:C40:C32:C9:C23:C6:C15:C1:C27:C19:C3:C2:C8:C4:C25:C20:C18:C11:C13:C12:C14:C35:C39:C22:C16:C29:C28:C34
A5:C17:C15:C1:C27:C38:C10:C19:C2:C22:C39:C7:C37:C41:C3:C5:C28:C36:C30:C40:C42:C35:C13:C33:C8:C25:C24:C11:C4:C23:C6:C18:C9:C32:C29:C26:C14:C21:C34:C20:C12:C16:C31
A6:C17:C3:C26:C25:C37:C31:C40:C12:C14:C18:C28:C23:C10:C30:C38:C22:C11:C35:C16:C29:C20:C36:C15:C2:C13:C9:C32:C6:C27:C42:C24:C7:C41:C39:C21:C1:C19:C34:C4:C5:C8:C33
A7:C27:C7:C30:C17:C4:C1:C10:C24:C20:C39:C8:C14:C15:C13:C11:C3:C6:C35:C28:C33:C19:C37:C26:C21:C16:C42:C5:C38:C32:C40:C18:C22:C34:C2:C12:C9:C29:C23:C36:C31:C25:C41
A8:C16:C18:C27:C36:C30:C5:C41:C15:C20:C7:C28:C13:C34:C24:C8:C6:C37:C22:C23:C10:C31:C42:C32:C3:C39:C26:C11:C4:C12:C38:C33:C9:C14:C29:C25:C21:C35:C1:C40:C17:C19:C2
A9:C40:C14:C25:C4:C36:C17:C32:C39:C26:C9:C23:C34:C13:C38:C18:C2:C16:C37:C6:C33:C42:C11:C22:C19:C27:C41:C15:C24:C30:C28:C12:C5:C21:C3:C29:C8:C35:C20:C7:C1:C10:C31
A10:C26:C10:C18:C2:C8:C17:C32:C31:C15:C29:C1:C4:C16:C27:C23:C12:C28:C25:C34:C3:C20:C37:C35:C14:C40:C39:C13:C38:C24:C21:C7:C33:C41:C42:C22:C5:C9:C36:C6:C11:C30:C19
A11:C11:C4:C17:C22:C2:C34:C19:C18:C40:C28:C13:C5:C30:C33:C26:C3:C12:C20:C21:C14:C35:C39:C24:C9:C7:C16:C29:C23:C38:C27:C41:C36:C15:C25:C31:C42:C1:C32:C6:C37:C10:C8
A12:C15:C10:C24:C35:C1:C21:C42:C27:C41:C30:C29:C18:C36:C23:C22:C25:C2:C38:C12:C17:C19:C3:C33:C6:C5:C34:C8:C31:C37:C11:C39:C16:C7:C26:C28:C32:C40:C4:C9:C14:C13:C20
A13:C37:C36:C30:C39:C1:C12:C7:C21:C35:C33:C11:C38:C2:C28:C25:C34:C22:C3:C31:C19:C16:C24:C10:C6:C13:C40:C20:C29:C14:C15:C18:C4:C23:C9:C42:C17:C8:C26:C27:C32:C41:C5
A14:C41:C29:C6:C37:C24:C38:C12:C36:C16:C26:C3:C28:C35:C8:C30:C34:C39:C25:C40:C11:C7:C42:C23:C19:C22:C13:C2:C15:C18:C4:C32:C21:C1:C20:C10:C27:C9:C33:C31:C5:C17:C14
A15:C12:C7:C10:C11:C14:C20:C6:C15:C28:C41:C5:C26:C21:C13:C38:C32:C23:C16:C18:C27:C40:C8:C33:C1:C36:C19:C39:C37:C2:C31:C3:C4:C24:C29:C25:C30:C9:C42:C22:C34:C35:C17
A16:C38:C17:C39:C26:C34:C36:C19:C29:C23:C6:C41:C7:C32:C1:C24:C11:C15:C28:C4:C14:C12:C20:C31:C16:C8:C40:C21:C2:C3:C25:C9:C18:C5:C10:C22:C13:C33:C37:C30:C27:C42:C35
A17:C9:C33:C25:C10:C42:C5:C32:C24:C2:C29:C17:C39:C16:C41:C11:C7:C26:C23:C13:C35:C8:C36:C28:C18:C38:C3:C15:C22:C20:C21:C6:C27:C30:C1:C31:C14:C4:C12:C37:C34:C40:C19
A18:C35:C5:C27:C7:C31:C17:C23:C9:C29:C38:C4:C24:C34:C33:C1:C37:C40:C10:C28:C8:C15:C41:C30:C36:C21:C11:C39:C42:C20:C14:C18:C3:C19:C26:C25:C2:C16:C6:C13:C32:C12:C22
A19:C19:C28:C42:C8:C25:C33:C12:C18:C17:C26:C10:C39:C41:C16:C7:C34:C11:C5:C27:C37:C13:C9:C20:C36:C21:C22:C24:C2:C6:C14:C4:C3:C38:C40:C15:C31:C35:C32:C29:C30:C23:C1
A20:C6:C1:C7:C40:C37:C26:C16:C24:C41:C21:C27:C33:C4:C36:C10:C18:C9:C2:C13:C38:C14:C31:C42:C12:C39:C11:C29:C17:C28:C19:C30:C23:C35:C34:C20:C3:C25:C15:C22:C32:C5:C8
A21:C40:C25:C23:C36:C6:C37:C32:C12:C34:C7:C21:C4:C29:C39:C15:C8:C10:C24:C1:C30:C5:C26:C31:C11:C2:C28:C35:C18:C20:C38:C22:C13:C3:C9:C41:C33:C27:C19:C14:C42:C16:C17
A22:C5:C31:C42:C26:C6:C41:C16:C14:C29:C12:C21:C38:C33:C19:C30:C24:C25:C18:C7:C3:C34:C2:C20:C22:C17:C8:C4:C11:C39:C27:C10:C32:C35:C1:C36:C13:C15:C23:C37:C9:C40:C28
A23:C18:C30:C36:C16:C11:C42:C4:C1:C33:C17:C37:C19:C39:C38:C7:C32:C15:C41:C8:C5:C14:C13:C6:C40:C12:C29:C34:C26:C22:C25:C28:C23:C31:C24:C9:C3:C35:C10:C21:C27:C20:C2
A24:C33:C2:C24:C12:C13:C7:C34:C16:C40:C28:C9:C22:C11:C4:C30:C18:C26:C5:C8:C6:C38:C42:C27:C32:C29:C20:C10:C15:C37:C36:C3:C23:C19:C39:C41:C21:C35:C17:C14:C1:C25:C31
A25:C7:C35:C24:C22:C26:C8:C31:C29:C15:C41:C39:C19:C33:C30:C28:C12:C17:C34:C36:C6:C3:C37:C10:C13:C18:C27:C2:C42:C21:C5:C23:C40:C9:C16:C25:C38:C11:C20:C4:C1:C32:C14
A26:C25:C28:C6:C8:C15:C3:C36:C34:C10:C40:C20:C11:C9:C4:C39:C17:C16:C26:C18:C38:C12:C35:C5:C2:C33:C21:C32:C22:C30:C29:C41:C27:C42:C24:C31:C7:C23:C13:C37:C14:C1:C19
A27:C23:C41:C25:C36:C31:C2:C6:C16:C10:C30:C33:C21:C39:C8:C19:C27:C35:C1:C29:C4:C7:C28:C37:C40:C34:C12:C18:C17:C42:C38:C15:C5:C3:C13:C24:C9:C14:C11:C20:C22:C32:C26
A28:C20:C14:C36:C5:C13:C8:C35:C40:C38:C10:C25:C15:C27:C24:C1:C3:C6:C12:C11:C30:C39:C16:C19:C7:C41:C31:C32:C29:C42:C2:C21:C9:C18:C4:C28:C33:C17:C23:C34:C26:C37:C22
A29:C8:C18:C25:C15:C9:C31:C19:C26:C28:C30:C14:C17:C13:C38:C33:C10:C41:C32:C20:C24:C22:C34:C4:C7:C6:C1:C12:C21:C42:C3:C35:C5:C2:C27:C40:C16:C36:C29:C39:C23:C37:C11
A30:C7:C42:C1:C40:C41:C25:C32:C5:C6:C13:C27:C34:C31:C37:C19:C38:C10:C2:C28:C30:C23:C17:C22:C9:C36:C33:C18:C39:C3:C20:C35:C14:C12:C29:C8:C24:C15:C26:C21:C11:C16:C4
A31:C14:C36:C15:C10:C28:C21:C30:C33:C26:C9:C22:C38:C3:C31:C27:C13:C4:C17:C18:C34:C29:C6:C11:C32:C25:C42:C39:C40:C23:C35:C1:C24:C12:C20:C7:C19:C37:C16:C2:C41:C5:C8
A32:C10:C4:C39:C41:C33:C42:C26:C21:C31:C6:C1:C15:C14:C27:C34:C38:C5:C13:C12:C36:C28:C16:C11:C35:C22:C23:C40:C18:C3:C37:C8:C29:C2:C7:C20:C25:C17:C32:C9:C19:C24:C30
A33:C39:C3:C2:C11:C14:C18:C40:C7:C23:C13:C5:C37:C10:C4:C25:C41:C22:C8:C27:C29:C16:C32:C26:C36:C24:C38:C12:C34:C1:C30:C9:C6:C35:C15:C28:C20:C42:C31:C17:C33:C19:C21
A34:C8:C39:C5:C30:C19:C1:C26:C6:C36:C32:C31:C40:C14:C24:C7:C33:C23:C11:C28:C3:C42:C34:C22:C21:C16:C38:C2:C35:C18:C9:C27:C41:C29:C25:C15:C12:C4:C17:C13:C37:C20:C10
A35:C31:C14:C1:C29:C26:C33:C19:C5:C28:C35:C36:C42:C6:C23:C12:C7:C9:C18:C24:C27:C21:C8:C11:C4:C20:C38:C30:C39:C15:C10:C41:C3:C34:C2:C22:C13:C37:C17:C16:C40:C25:C32
A36:C37:C15:C36:C5:C12:C24:C25:C28:C23:C10:C14:C27:C19:C38:C21:C32:C18:C41:C34:C13:C31:C35:C16:C22:C2:C26:C42:C17:C6:C39:C9:C11:C1:C4:C40:C7:C20:C29:C30:C8:C3:C33
A37:C16:C22:C3:C5:C34:C32:C15:C23:C38:C4:C42:C24:C14:C10:C21:C41:C26:C17:C18:C25:C1:C11:C29:C35:C33:C40:C28:C6:C27:C8:C19:C7:C31:C9:C39:C36:C30:C37:C20:C12:C13:C2
A38:C16:C3:C27:C13:C7:C34:C9:C15:C38:C20:C41:C36:C39:C2:C23:C10:C22:C33:C26:C37:C42:C18:C1:C17:C31:C24:C21:C14:C19:C40:C11:C28:C30:C8:C6:C12:C25:C35:C29:C5:C32:C4
A39:C13:C6:C1:C4:C5:C16:C12:C10:C8:C41:C14:C18:C25:C38:C23:C36:C2:C30:C19:C21:C33:C17:C39:C3:C34:C26:C27:C9:C42:C28:C35:C40:C7:C29:C20:C24:C31:C37:C15:C32:C11:C22
A40:C6:C19:C27:C34:C35:C7:C36:C26:C29:C31:C15:C30:C37:C25:C32:C20:C21:C5:C28:C4:C38:C18:C10:C17:C42:C9:C16:C23:C1:C2:C24:C41:C13:C33:C22:C12:C3:C14:C8:C39:C40:C11
A41:C9:C32:C19:C5:C12:C38:C42:C36:C20:C39:C34:C17:C8:C10:C25:C33:C4:C26:C6:C37:C23:C16:C2:C24:C30:C31:C22:C41:C15:C1:C28:C13:C11:C7:C14:C27:C40:C3:C35:C18:C29:C21
A42:C13:C39:C28:C21:C16:C9:C4:C6:C24:C20:C31:C3:C29:C26:C12:C41:C40:C17:C10:C30:C38:C25:C2:C22:C36:C1:C35:C33:C14:C32:C18:C42:C37:C27:C19:C11:C8:C7:C23:C5:C34:C15
C1:A7:A39:A38:A6:A25:A2:A36:A35:A9:A37:A10:A15:A20:A8:A17:A11:A28:A1:A13:A31:A22:A12:A26:A42:A24:A18:A3:A29:A40:A30:A19:A4:A14:A5:A21:A41:A23:A32:A33:A16:A34:A27
C2:A15:A7:A33:A14:A22:A30:A28:A39:A13:A10:A40:A6:A42:A18:A4:A16:A26:A17:A3:A31:A1:A27:A34:A25:A29:A37:A35:A9:A23:A24:A11:A12:A21:A19:A20:A38:A2:A32:A36:A8:A5:A41
C3:A8:A35:A7:A41:A25:A30:A23:A17:A20:A36:A16:A11:A14:A24:A37:A42:A21:A12:A5:A18:A28:A19:A2:A3:A29:A1:A10:A33:A32:A4:A26:A38:A22:A9:A27:A15:A39:A34:A6:A40:A13:A31
C4:A41:A31:A26:A5:A3:A32:A21:A20:A39:A27:A25:A9:A34:A35:A15:A23:A7:A42:A4:A11:A33:A17:A28:A40:A19:A36:A22:A14:A30:A10:A13:A29:A38:A6:A16:A24:A12:A18:A37:A1:A2:A8
C5:A9:A22:A33:A25:A39:A41:A15:A8:A10:A5:A6:A40:A21:A42:A29:A16:A32:A35:A19:A13:A18:A30:A3:A11:A23:A37:A34:A20:A36:A27:A31:A17:A26:A2:A12:A24:A38:A1:A14:A7:A28:A4
C6:A27:A42:A29:A19:A6:A1:A24:A3:A2:A5:A31:A28:A36:A33:A15:A32:A30:A20:A16:A12:A23:A17:A38:A40:A21:A9:A10:A18:A25:A13:A26:A14:A39:A11:A7:A34:A8:A4:A35:A22:A37:A41
C7:A22:A39:A5:A7:A19:A13:A31:A15:A18:A20:A35:A23:A16:A33:A28:A30:A9:A27:A8:A12:A29:A21:A32:A17:A38:A37:A1:A25:A14:A26:A24:A2:A4:A3:A34:A10:A42:A41:A36:A40:A11:A6
C8:A36:A7:A20:A22:A16:A37:A2:A6:A26:A14:A30:A24:A39:A31:A10:A9:A42:A4:A5:A32:A13:A18:A27:A15:A23:A12:A33:A3:A19:A1:A38:A11:A41:A34:A8:A25:A21:A17:A35:A29:A28:A40
C9:A3:A28:A18:A34:A33:A7:A21:A24:A5:A20:A42:A30:A15:A35:A39:A40:A38:A36:A25:A2:A32:A27:A14:A29:A13:A26:A22:A12:A19:A37:A31:A23:A11:A17:A41:A6:A9:A10:A4:A1:A8:A16
C10:A23:A18:A21:A33:A7:A1:A10:A2:A26:A35:A34:A8:A25:A19:A41:A38:A20:A30:A13:A29:A31:A42:A36:A15:A28:A4:A39:A6:A17:A16:A22:A37:A14:A24:A40:A27:A12:A11:A5:A3:A32:A9
C11:A42:A7:A40:A5:A9:A6:A12:A31:A17:A14:A2:A10:A8:A26:A15:A18:A1:A36:A30:A41:A25:A32:A11:A38:A24:A35:A19:A29:A3:A20:A23:A39:A21:A27:A13:A37:A33:A28:A34:A4:A16:A22
C12:A19:A18:A22:A13:A4:A1:A11:A40:A41:A35:A12:A26:A42:A14:A33:A9:A3:A30:A34:A7:A20:A28:A5:A21:A32:A36:A15:A25:A2:A39:A17:A10:A37:A23:A31:A8:A38:A6:A24:A16:A27:A29
C13:A41:A39:A24:A35:A31:A1:A8:A19:A5:A20:A13:A17:A40:A38:A29:A7:A10:A23:A3:A2:A30:A26:A37:A14:A15:A28:A4:A16:A9:A32:A12:A25:A11:A6:A36:A42:A27:A18:A33:A22:A34:A21
C14:A34:A24:A36:A5:A1:A3:A19:A10:A4:A14:A31:A23:A26:A32:A39:A41:A11:A18:A40:A35:A28:A12:A42:A6:A33:A37:A8:A16:A7:A38:A13:A20:A30:A29:A17:A22:A27:A15:A9:A25:A21:A2
C15:A31:A24:A32:A13:A14:A23:A9:A29:A28:A1:A21:A20:A27:A40:A4:A35:A8:A38:A22:A15:A42:A11:A36:A5:A41:A19:A25:A34:A33:A12:A37:A26:A6:A3:A16:A30:A18:A7:A39:A2:A10:A17
C16:A13:A18:A16:A4:A11:A6:A9:A23:A22:A29:A14:A42:A26:A28:A30:A12:A41:A40:A39:A38:A2:A25:A5:A21:A19:A20:A1:A15:A7:A27:A8:A17:A35:A34:A24:A3:A36:A33:A31:A10:A32:A37
C17:A18:A39:A37:A14:A9:A30:A4:A1:A33:A5:A12:A3:A7:A26:A11:A34:A24:A25:A20:A38:A23:A27:A19:A21:A31:A29:A2:A13:A36:A15:A40:A6:A8:A22:A41:A28:A35:A16:A10:A42:A32:A17
C18:A40:A20:A8:A39:A31:A16:A37:A12:A32:A25:A34:A41:A10:A30:A4:A27:A23:A22:A19:A17:A13:A28:A3:A18:A42:A5:A11:A26:A7:A6:A36:A2:A14:A21:A38:A33:A24:A9:A15:A35:A1:A29
C19:A14:A35:A8:A3:A28:A22:A21:A31:A4:A33:A11:A37:A34:A9:A6:A12:A17:A18:A27:A1:A5:A15:A38:A41:A20:A19:A40:A30:A29:A13:A39:A32:A16:A7:A10:A25:A42:A23:A2:A36:A26:A24
C20:A16:A20:A1:A3:A22:A41:A18:A10:A25:A33:A21:A32:A4:A24:A30:A37:A15:A11:A5:A31:A34:A39:A35:A17:A7:A36:A6:A14:A13:A2:A12:A28:A40:A27:A26:A8:A19:A29:A23:A38:A42:A9
C21:A28:A31:A20:A30:A42:A4:A37:A35:A22:A15:A25:A5:A13:A33:A19:A14:A16:A9:A6:A7:A11:A39:A12:A2:A41:A26:A21:A38:A32:A23:A24:A27:A34:A8:A18:A17:A29:A40:A1:A10:A36:A3
C22:A3:A8:A40:A20:A12:A22:A29:A11:A19:A7:A36:A26:A23:A13:A32:A15:A37:A17:A31:A14:A1:A28:A18:A39:A2:A42:A35:A38:A10:A27:A33:A4:A34:A21:A30:A41:A5:A25:A6:A16:A9:A24
C23:A6:A11:A16:A35:A28:A41:A23:A24:A32:A3:A27:A29:A21:A13:A8:A20:A34:A36:A37:A39:A10:A18:A14:A4:A42:A2:A26:A9:A12:A33:A15:A19:A1:A5:A25:A22:A31:A40:A17:A7:A38:A30
C24:A19:A15:A11:A41:A18:A42:A25:A30:A31:A17:A9:A33:A36:A38:A27:A40:A20:A34:A24:A39:A23:A5:A6:A14:A13:A32:A28:A29:A1:A2:A3:A37:A26:A4:A7:A16:A22:A10:A35:A12:A8:A21
C25:A37:A5:A41:A31:A35:A12:A8:A11:A28:A36:A18:A39:A20:A9:A33:A32:A6:A25:A23:A26:A42:A19:A7:A16:A1:A10:A2:A34:A14:A29:A40:A3:A21:A24:A27:A13:A38:A17:A4:A15:A30:A22
C26:A2:A26:A11:A14:A1:A40:A25:A27:A12:A34:A5:A9:A13:A10:A35:A23:A32:A7:A36:A29:A28:A4:A39:A6:A38:A37:A41:A16:A17:A15:A24:A8:A21:A31:A20:A33:A18:A3:A19:A22:A42:A30
C27:A12:A4:A13:A19:A30:A7:A32:A17:A37:A1:A23:A18:A5:A40:A9:A34:A39:A20:A25:A38:A14:A11:A15:A8:A36:A28:A35:A22:A33:A29:A10:A24:A42:A21:A6:A27:A3:A31:A41:A2:A26:A16
C28:A8:A3:A22:A36:A23:A25:A14:A11:A5:A40:A35:A24:A37:A26:A20:A15:A42:A16:A30:A19:A31:A21:A33:A1:A12:A2:A28:A10:A6:A13:A27:A17:A29:A34:A41:A32:A39:A7:A4:A9:A38:A18
C29:A29:A36:A27:A9:A25:A41:A34:A42:A7:A1:A32:A24:A3:A37:A8:A30:A12:A5:A18:A23:A26:A11:A21:A13:A10:A14:A20:A15:A19:A35:A31:A39:A28:A22:A33:A17:A40:A38:A6:A2:A16:A4
C30:A13:A9:A2:A11:A32:A26:A16:A29:A38:A41:A36:A17:A25:A27:A1:A37:A21:A28:A31:A7:A30:A5:A12:A24:A6:A42:A34:A10:A33:A4:A14:A20:A8:A40:A22:A23:A39:A19:A18:A15:A35:A3
C31:A39:A18:A17:A3:A24:A36:A11:A23:A19:A37:A5:A31:A26:A30:A34:A8:A10:A14:A22:A42:A38:A9:A16:A35:A21:A41:A33:A32:A29:A15:A1:A2:A4:A6:A25:A27:A12:A20:A7:A40:A28:A13
C32:A19:A37:A12:A21:A17:A15:A40:A5:A34:A31:A24:A39:A13:A36:A2:A25:A3:A28:A8:A14:A18:A32:A26:A23:A30:A42:A35:A9:A1:A16:A27:A10:A20:A33:A7:A29:A11:A4:A38:A6:A41:A22
C33:A28:A14:A18:A8:A16:A21:A35:A23:A30:A4:A19:A10:A39:A36:A26:A25:A32:A7:A24:A15:A41:A12:A3:A22:A17:A5:A34:A9:A42:A38:A37:A1:A33:A31:A11:A20:A40:A27:A6:A2:A13:A29
C34:A13:A20:A26:A10:A39:A38:A15:A24:A27:A3:A16:A8:A28:A19:A14:A18:A35:A1:A12:A21:A6:A25:A32:A33:A30:A41:A7:A17:A5:A9:A36:A42:A40:A11:A4:A37:A31:A2:A29:A34:A22:A23
C35:A31:A29:A19:A20:A14:A16:A33:A25:A5:A35:A24:A38:A10:A13:A4:A22:A8:A42:A7:A6:A17:A30:A36:A11:A18:A34:A39:A2:A1:A28:A3:A15:A37:A21:A12:A26:A27:A41:A23:A32:A40:A9
C36:A3:A28:A18:A11:A30:A1:A12:A29:A23:A31:A5:A38:A36:A24:A20:A9:A10:A25:A4:A22:A34:A6:A21:A41:A13:A35:A42:A15:A40:A17:A33:A27:A26:A14:A8:A16:A39:A7:A2:A19:A32:A37
C37:A28:A10:A31:A8:A15:A6:A13:A16:A37:A40:A24:A38:A29:A32:A4:A30:A3:A17:A9:A2:A34:A21:A5:A20:A26:A33:A35:A22:A42:A27:A11:A23:A36:A41:A14:A18:A1:A19:A25:A12:A39:A7
C38:A34:A4:A39:A25:A40:A28:A26:A15:A2:A36:A11:A17:A10:A8:A21:A41:A13:A9:A38:A33:A22:A23:A3:A18:A27:A35:A16:A42:A1:A24:A20:A14:A32:A6:A5:A37:A29:A12:A7:A31:A30:A19
C39:A37:A38:A4:A10:A40:A39:A27:A28:A36:A30:A22:A34:A19:A9:A35:A33:A24:A18:A42:A3:A17:A14:A8:A13:A6:A7:A26:A29:A20:A32:A16:A41:A11:A31:A15:A2:A23:A1:A25:A21:A5:A12
C40:A21:A38:A29:A42:A28:A25:A32:A41:A6:A16:A36:A11:A35:A5:A22:A3:A10:A17:A15:A39:A18:A30:A37:A7:A24:A13:A1:A31:A12:A20:A4:A33:A9:A19:A34:A8:A23:A26:A2:A40:A14:A27
C41:A23:A38:A36:A16:A24:A1:A33:A13:A35:A6:A26:A29:A14:A39:A20:A18:A11:A19:A21:A12:A32:A37:A3:A22:A7:A30:A15:A5:A31:A2:A9:A27:A40:A10:A4:A17:A8:A34:A28:A41:A42:A25
C42:A31:A18:A29:A1:A10:A21:A25:A33:A2:A27:A7:A34:A20:A5:A9:A22:A37:A3:A41:A24:A11:A32:A12:A42:A15:A14:A28:A19:A36:A4:A16:A23:A39:A26:A35:A13:A38:A8:A40:A6:A17:A30
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment