## Revision of SE ratings and resolution rules

Programs which generate, solve, and analyze Sudoku puzzles

### Re: Revision of SE ratings and resolution rules

Are you planning to implement generalized fishes?
In windoku there are 5 hidden constraints, but in sudoku x you have also 3 extra hidden constraints of size 5. Locked sets are sometimes possible inside these 3 hidden constraints.
Did you check how much those hidden constraints/generalized methods affect the rating of variant puzzles?
Is there an option to find all steps on a multi-solution grid in SE?
Xsudo only supports normal sudoku, but I have verified the following examples in my solver:

Hidden Text: Show
1r289c28 => -1r5c5, -1r9c1345679 (2 truths and 2 links) X-wing
Code: Select all
`.---------------------------------.---------------------------------.---------------------------------.| 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 || 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 || 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |'---------------------------------'---------------------------------'---------------------------------'`

1r12589c28 => -1r19c134679 (3 truths and 3 links) Swordfish
Code: Select all
`.---------------------------------.---------------------------------.---------------------------------.| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  23456789   123456789 | 123456789  123456789  123456789 || 123456789  23456789   123456789 | 123456789  23456789   123456789 | 123456789  23456789   123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  23456789   123456789 | 123456789  23456789   123456789 | 123456789  23456789   123456789 || 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 || 123456789  23456789   123456789 | 123456789  23456789   123456789 | 123456789  23456789   123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  23456789   123456789 | 123456789  23456789   123456789 | 123456789  23456789   123456789 || 123456789  123456789  123456789 | 123456789  23456789   123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |'---------------------------------'---------------------------------'---------------------------------'`
creint

Posts: 201
Joined: 20 January 2018

### Re: Revision of SE ratings and resolution rules

@ creint: when you state that in sudoku x you have also 3 extra hidden constraints of size 5, are you referring to intersections or something else? I'd appreciate more details.

@ tarek: I'm grateful for all the work you're doing. There is one thing, however, that I've found strange several times. For instance, in this partially solved X-sudoku
Code: Select all
` . . . . . 1 9 3 2 . . 3 . 4 2 5 . 1 2 1 . . 9 . . 6 4 . . 7 1 . 4 6 . 8 . 2 . . 3 . 4 1 . 4 6 1 9 . . 3 . . 7 8 6 4 1 9 2 5 3 . 5 2 . 7 . 1 4 . 1 . . 2 . . . . .`

the easiest next step (after basics) in my eyes is an xy-wing (SE 4.2) involving just 3 cells (r4c2, r9c2, r9c3), but SukakuExplainer prefers a more complicated skyscraper (SE 4.0) involving 4 cells:
Code: Select all
`Skyscraper 011This technique relies on Conjugate Pairs. The value 9 in column C and column H forms 2 (regional) strong links or conjugate pairs with 1 set(s) of bridge cells in row 9 and row 9. The 2 strong links are joined therefore with 1 weak link(s).`

Thanks Mike

m_b_metcalf
2017 Supporter

Posts: 11122
Joined: 15 May 2006
Location: Berlin

### Re: Revision of SE ratings and resolution rules

The 3 extra hidden constraints are: r19c19+r5c5, r28c28+r5c5, r37c37+r5c5.
Because when you are using 1r1c1 then you exclude in same \ but also by rows and columns in the other /.
So in fact these 5 cells are forming an all-different constraint too.
Directly usable for naked sets and when cellcount = digitcount then also usable for hidden sets.
creint

Posts: 201
Joined: 20 January 2018

### Re: Revision of SE ratings and resolution rules

creint wrote:Are you planning to implement generalized fishes?

I would love to have that but the short answer is Not anytime soon. X-wings will be caught in Sukaku explainer in at least 3 ways:
1. The old implemented Fish technique will catch any rc X-Wing
2. The strong links algorithm(s) (The same that would catch Skyscrapers and 2-String Kites) and would report them as 2 strong link x loops. These will be caught including if Finned & in any supported variant. Any fish of order greater than N=2 will be caught only if the if the truth/link pattern is 2x2x...N times Where N is the order of the fish. Grouped strong links allows for finned varieties of these fishes but will not catch other fish that do not satisfy these restrictions.
3. Forcing X cycles: These would catch any fish only if the if the truth/link pattern is 2x2x...N times and will not catch finned fish. This will catch these fish in variants too

creint wrote:In windoku there are 5 hidden constraints, but in sudoku x you have also 3 extra hidden constraints of size 5. Locked sets are sometimes possible inside these 3 hidden constraints.
Only the 9 cell hidden Windoku windows are supported (They are not hidden anymore).

I would certainly say that supporting the hidden constraints from Sudoku X would reduce the difficulty: Naked sets (including naked singles), Almost naked sets, Generalized intersections and Strong links would all benefit from it. These will need to be declared in the Welcome window as constraints so that any player understands why this technique was used in that setting. These Sudoku-X constraints could be added (?Easily) but they will need to wait until somebody (usually me ) is free to implement them. As you also mention. If the number of symbols available equals the number of cells in the constraint the we can also take advantage of the hidden sets techniques including hidden singles). More projects and very little time

creint wrote:Is there an option to find all steps on a multi-solution grid in SE?

SE should accept a pencilmark grid. IIRC, if you press Get next Hint it should progress the puzzle until it can't solve the puzzle (Non solvable or more than one solution)

m_b_metcalf wrote:the easiest next step (after basics) in my eyes is an xy-wing (SE 4.2) involving just 3 cells (r4c2, r9c2, r9c3), but SukakuExplainer prefers a more complicated skyscraper (SE 4.0) involving 4 cells

This is definitely the place to query this. I would look at all these turbot fishes as interactions between 2 strong links in location using 1 digit. So they are of same magnitude as an X-Wing (rated at 3.2). The XY and XYZ wing has 3 cells but also 3 digits so they are in theory more complex than the Skyscraper/2-String Kite/Turbot Crane

Just to add more to the debate: The swordfish is rated at 3.8 would what I said about the 2 strong links above make the skyscraper worthy of further demotion?

tarek

Posts: 3745
Joined: 05 January 2006

### Re: Revision of SE ratings and resolution rules

I forgot to mention that using SE command line (see wiki pages for help) you can process any supported puzzle using the 81 character or 729 character format. It will process the puzzle even if it has multiple solutions or no solutions.

The old fish catcher will catch any rc non finned fish. It shouldn't be an issue to modify it to catch r/, r\, c/, c\, or bp non finned fish as all these combination intersect at 1 cell but I can't see it catching generalized fish in the UFG style which requires starting from scratch imo. The base / cover potential eliminations & fins are all in theory should be very easy using a recursive process. Having more regions &/or bigger board will come at high cost

tarek

Posts: 3745
Joined: 05 January 2006

### Re: Revision of SE ratings and resolution rules

tarek wrote:
creint wrote:In windoku there are 5 hidden constraints, but in sudoku x you have also 3 extra hidden constraints of size 5. Locked sets are sometimes possible inside these 3 hidden constraints.

I would certainly say that supporting the hidden constraints from Sudoku X would reduce the difficulty: Naked sets (including naked singles), Almost naked sets, Generalized intersections and Strong links would all benefit from it. These will need to be declared in the Welcome window as constraints so that any player understands why this technique was used in that setting. These Sudoku-X constraints could be added (?Easily) but they will need to wait until somebody (usually me ) is free to implement them.

It will automatically be found in the generalized intersections method. Normally you will choose only one house of a type (r,c,b,x,w,a,g,p...) and compare that with a house of another type and then a 3rd house of yet another type, etc. If candidates are locked in intersections of a certain house, try to eliminate candidates from cells in the other houses that see all the locked cells. Except for the sudokuX. In this case you should allow both houses (diagonals) to be present. Than you include the 5 constraints creint mentioned. I just implemented that in SiSeSuSo. Not yet released. I defined 2 separate groups of houses for the 2 diagonals with just 1 house in it, like an asterisk or girandola. Fixed it. Diagonals are intersecting each other, which is different from all houses of any other type.

Hajime

Posts: 192
Joined: 20 April 2018
Location: Netherlands

### Re: Revision of SE ratings and resolution rules

creint wrote:So in fact these 5 cells are forming an all-different constraint too.
Directly usable for naked sets and when cellcount = digitcount then also usable for hidden sets.

Thanks for the reply. I haven't quite understood how this property is useful in a solver that has the diagonals already taken into account. Do you (or Tarek or Hajime) have an example of how the 'all-different constraint' is useful for eliminations that aren't handled anyway?

Thanks,

Mike

m_b_metcalf
2017 Supporter

Posts: 11122
Joined: 15 May 2006
Location: Berlin

### Re: Revision of SE ratings and resolution rules

I’m looking at this issue again after Mike’s last post. Any cell in that 5-cell constraint can see the other 4 cells using the already declared constraints. This suggests that there is no benefit at a first glance in declaring it as a separate constraint as it wasn’t a hidden feature to start with!!!

My head hurts from overthinking this at the moment so I’ll leave it to simmer for a bit whilst others give their opinions!!!

tarek

Posts: 3745
Joined: 05 January 2006

### Re: Revision of SE ratings and resolution rules

There are 2 subjects here.
1. 5 cells that need 5 different solutions
You can see it as a 5-cell constraint, for which may possible see a naked or hidden subset of a partly house.
2. 2 diagonals and 1 line (row or column), that form an intersection problem of 3 houses. If 1 house 'says' that all its candidates k are in the intersection (2 cells) with the other 2 houses, than the intersection of those other 2 houses can not have candidate k.
In a standard sudoku you have only rows with boxes or columns with boxes that intersect (pointing or claiming) and a possibility to eliminate candidates. Three houses: a row, a column and a box does not lead to extra elimination possibilities. So for 3 or more intersections you need extra types like asterisk, girandola, X-sudoku, windoku ....
'Normal programming' [what's that?] will not try 2 houses of the same type eg 2 rows to compare with a box or so, because the rows never intersect each other. So you probably grab 1 house of a certain type A with 1 house of type B and a third house of type C in your generalized intersection routine. That's good for all types, except for diagonals. Because diagonals intersect each other .
If you solver is programmed to process 1 house per type you will oversee the possible 2 diagonals intersect with 1 row or 1 column. So allow that 2 diagonals of 1 type (x-sudoku) can be part of 3 or more houses to compare.

PS the SE rating for generalized intersection is lower than a naked or hidden pair or triplet.

Hajime

Posts: 192
Joined: 20 April 2018
Location: Netherlands

### Re: Revision of SE ratings and resolution rules

Hajime,
Thanks for your reply. Your point 2. is well known as an intersection, and I have it programmed. It's point 1. where I can't understand what extra possible scope for eliminations it offers when diagonals are already considered. I would appreciate a real-life example as opposed to text.

Many thanks,

Mike

m_b_metcalf
2017 Supporter

Posts: 11122
Joined: 15 May 2006
Location: Berlin

### Re: Revision of SE ratings and resolution rules

Here are some examples:

Naked quad 1234r28c28 => -1234r5c5
Hidden Text: Show
Code: Select all
`.---------------------------------.---------------------------------.---------------------------------.| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  1234       123456789 | 123456789  123456789  123456789 | 123456789  1234       123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  1234       123456789 | 123456789  123456789  123456789 | 123456789  1234       123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |'---------------------------------'---------------------------------'---------------------------------'`

Naked quad 1234r2c28+1234r5c5+1234r8c2 => -1234r8c8
Hidden Text: Show
Code: Select all
`.---------------------------------.---------------------------------.---------------------------------.| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  1234       123456789 | 123456789  123456789  123456789 | 123456789  1234       123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  1234       123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  1234       123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |'---------------------------------'---------------------------------'---------------------------------'`

Generalized Naked triple in /, not using this hidden constraint so could already be implemented? -45r2c2, -45r8c8
Hidden Text: Show
Code: Select all
`.---------------------------------.---------------------------------.---------------------------------.| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  12345      123456789 | 123456789  123456789  123456789 | 123456789  123        123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123        123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123        123456789 | 123456789  123456789  123456789 | 123456789  12345      123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |'---------------------------------'---------------------------------'---------------------------------'`

Hidden triple 123r2c28+123r8c2 => -45r2c28,-45r8c2 (give same exclusions as generalized naked pair in normal \ constraint)
Hidden Text: Show
Code: Select all
`.---------------------------------.---------------------------------.---------------------------------.| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  12345      123456789 | 123456789  123456789  123456789 | 123456789  12345      123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  45         123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  12345      123456789 | 123456789  123456789  123456789 | 123456789  45         123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |'---------------------------------'---------------------------------'---------------------------------'`

Hidden single in constraint => 5r5c5
Hidden Text: Show
Code: Select all
`.---------------------------------.---------------------------------.---------------------------------.| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  1234       123456789 | 123456789  123456789  123456789 | 123456789  1234       123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  12345      123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  1234       123456789 | 123456789  123456789  123456789 | 123456789  1234       123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |'---------------------------------'---------------------------------'---------------------------------'`

Locked single in constraint => -5r5c2
Hidden Text: Show
Code: Select all
`.---------------------------------.---------------------------------.---------------------------------.| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  12345      123456789 | 123456789  123456789  123456789 | 123456789  1234       123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  12345      123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  12345      123456789 | 123456789  123456789  123456789 | 123456789  1234       123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |'---------------------------------'---------------------------------'---------------------------------'`

1r289c28 => -1r5c5, -1r9c1345679 (2 truths and 2 links) X-wing
Hidden Text: Show
Code: Select all
`.---------------------------------.---------------------------------.---------------------------------.| 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 || 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 || 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |'---------------------------------'---------------------------------'---------------------------------'`

1r12589c28 => -1r19c134679 (3 truths and 3 links) Swordfish
Hidden Text: Show
Code: Select all
`.---------------------------------.---------------------------------.---------------------------------.| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  23456789   123456789 | 123456789  123456789  123456789 || 123456789  23456789   123456789 | 123456789  23456789   123456789 | 123456789  23456789   123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  23456789   123456789 | 123456789  23456789   123456789 | 123456789  23456789   123456789 || 123456789  23456789   123456789 | 123456789  123456789  123456789 | 123456789  23456789   123456789 || 123456789  23456789   123456789 | 123456789  23456789   123456789 | 123456789  23456789   123456789 |:---------------------------------+---------------------------------+---------------------------------:| 123456789  23456789   123456789 | 123456789  23456789   123456789 | 123456789  23456789   123456789 || 123456789  123456789  123456789 | 123456789  23456789   123456789 | 123456789  123456789  123456789 || 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |'---------------------------------'---------------------------------'---------------------------------'`
Last edited by creint on Wed Jul 29, 2020 7:00 am, edited 2 times in total.
creint

Posts: 201
Joined: 20 January 2018

### Re: Revision of SE ratings and resolution rules

creint wrote:Here are some examples:

Naked quad 1234r28c28 => -1234r5c5

... but none of these are actual puzzles! They're not even x-sukakus.

Mike

m_b_metcalf
2017 Supporter

Posts: 11122
Joined: 15 May 2006
Location: Berlin

### Re: Revision of SE ratings and resolution rules

It is an puzzle with multiple solutions, solver could progress a little.
It is possible to build a valid solution around it.
creint

Posts: 201
Joined: 20 January 2018

### Re: Revision of SE ratings and resolution rules

creint wrote:It is an puzzle with multiple solutions,...

A 'puzzle with multiple solutions' is not a puzzle!

Regards,

Mike

m_b_metcalf
2017 Supporter

Posts: 11122
Joined: 15 May 2006
Location: Berlin

### Re: Revision of SE ratings and resolution rules

Here an real example:
Naked triple r2c28+r8c2 => -3r8c8, or just hidden single in hidden constraint => 5r8c8
Hidden Text: Show
Code: Select all
`2348    6       134     1234589 134589  13458   13458   3458    75       134     9       13468   134678  13478   1348    2       13234     7       1348    123458  13458   13458   6       9       1351       34589   3458    7       2       3458    345     6       359347     2345    6       1345    134     9       23457   3457    83478    29      3458    3458    3458    6       12      3457    1296       1358    1358    1358    13578   2       9       378     4348     134     2       134589  1345789 134578  378     35      69       3458    7       34568   34568   3458    238     1       235`
Code: Select all
`.234...8......6...1.34.....12345..891.345..891.345..8.1.345..8...345..8.......7......5....1.34.............91.34.6.8.1.34.678.1.34..78.1.34...8..2.......1.3.......234...........7..1.34...8.12345..8.1.345..8.1.345..8......6...........91.3.5....1..........345..89..345..8.......7...2.........345..8...345.........6.....3.5...9..34..7...2345.........6...1.345....1.34.............9.2345.7....345.7.........8...34..78..2......9..345..8...345..8...345..8......6...12.........345.7..12......9.....6...1.3.5..8.1.3.5..8.1.3.5..8.1.3.5.78..2...............9..3...78....4.......34...8.1.34......2.......1.345..891.345.7891.345.78...3...78...3.5.........6...........9..345..8.......7....3456.8...3456.8...345..8..23....8.1.........23.5....`
creint

Posts: 201
Joined: 20 January 2018

PreviousNext