Lilypond not automatically starting a new row of bars when lyrics and music too long to fit on single line - lilypond

I have the following script:
\version "2.16.0"
\header {title = "He came down"}
upper = \relative c'' {
\easyHeadsOn
\clef treble
\key g \major
\numericTimeSignature
\time 4/4
%He came down that we may have love;
d,8 <d g>4 <d g> <d b'> <c a'> <d g> <fis a> <d c>2 r8
%He came down that we may have love;
<d c>8 <d a'>4 <d a'> <e c'> <d b'> <c a'> <d b'> <b g'>2 r8
%He came down that we may have love;
<b g'>8 <d b'>4 <d b> <g d'> <g c> <g b> <g c> g2
%Hal -- le -- lu -- Yah for ev -- er -- more.
}
lower = \relative c {
\clef bass
\key g \major
\time 4/4
d8
}
text = \lyricmode {
He came down that we may have love;
He came down that we may have love;
He came down that we may have love;
Hal -- le -- lu -- Yah for ev -- er -- more.
}
\score {
\new GrandStaff <<
\new Staff = upper {\new Voice = "singer" \upper }
\new Lyrics \lyricsto "singer" \text
\new Staff = lower { \lower }
>>
}
Unfortunately when I compile it in Lilypond I get the following output:
Does anyone know how I can get Lilypond to typeset this correctly?

This is not really a programming issue, your problem is that you are adding too many notes to your 4/4 time signature. LilyPond has problems deciding when to add line breaks if the rhythms are exceeding the bar allowance (normally a score not line breaking is a red flag for rhythm problems). You can also add bar checks to your code using |. When using those, LilyPond will check if a bar line coincides with the bar rest position, and if there is a problem an error will be output, telling you exactly where the bar check does not coincide with the bar line.
Here is a fixed version of your code, though I am not sure this is the rhythm you intended or not:
\version "2.16.0"
\header {title = "He came down"}
upper = \relative c'' {
\easyHeadsOn
\clef treble
\key g \major
\numericTimeSignature
\time 4/4
%He came down that we may have love;
d,8 <d g>4 <d g> <d b'> <c a'>8 | <d g>4 <fis a> <d c>2 |
%He came down that we may have love;
<d c>8 <d a'>4 <d a'> <e c'> <d b'>8 | <c a'>4 <d b'> <b g'>2 |
%He came down that we may have love;
<b g'>8 <d b'>4 <d b> <g d'>8 <g c>4 | <g b> <g c> g2 |
%Hal -- le -- lu -- Yah for ev -- er -- more.
}
lower = \relative c {
\clef bass
\key g \major
\time 4/4
d8
}
text = \lyricmode {
He came down that we may have love;
He came down that we may have love;
He came down that we may have love;
Hal -- le -- lu -- Yah for ev -- er -- more.
}
\score {
\new GrandStaff <<
\new Staff = upper {\new Voice = "singer" \upper }
\new Lyrics \lyricsto "singer" \text
\new Staff = lower { \lower }
>>
}

I assume it is just the upbeat that prevents lilypond from detecting the correct rythm. Just add a \partial 8 (this is the length of the upbeat).
\version "2.16.0"
\header {title = "He came down"}
upper = \relative c'' {
\easyHeadsOn
\clef treble
\key g \major
\numericTimeSignature
\time 4/4
\partial 8 % **This marks the upbeat. The length is 8, matching d,8 below**
%He came down that we may have love;
d,8 <d g>4 <d g> <d b'> <c a'>8 | <d g>4 <fis a> <d c>2 |
...

Related

Highlight more than one anchor

I would like to highlight two sections of a page at the same time.
Currently I have the following:
<li class="langLI" style="list-style-type:none">| French Creole</li>
and I would like this footer link to anchor and highlight the following sections:
<p id="French"><strong>French Creole</strong><br />
ATANSYON: Si w pale Kreyòl Ayisyen, gen sèvis èd pou lang ki disponib gratis pou ou. Rele 1-321-268-6111. (TTY: 1-800-955-8771)</p>
<p id="French"><strong>French</strong><br />
ATTENTION: Si vous parlez français, des services d'aide linguistique vous sont proposés gratuitement. Appelez le 1-321-268-6111. (TTY: 1-800-955-8771)</p>
This is the CSS I am using to highlight the selected section:
#French:target{
background-color: #ffa;
-webkit-transition: all 1s linear;
}
Currently, it will anchor and highlight the French Creole. How can I highlight both sections?
Javascript way
<li class="langLI" style="list-style-type:none"><a onclick="mulselect()">| French Creole</a></li>
Calling a javascript function using onclick listener, getting all elements with French class as array and then iterating over them to change the style.
function mulselect(){
french=document.getElementsByClassName("French");
for( i in french ) {
french[i].style.backgroundColor = 'yellow';
}
CSS way "If they are at one place"
Note the change in href attribute, Now link targets to parent div of the elements to be selected.
<li class="langLI" style="list-style-type:none">| French Creole</li>
Wrap these p tags in a parent div with target id
<div id="targetarea">
<p class="French"><strong>French Creole</strong><br />
ATANSYON: Si w pale Kreyòl Ayisyen, gen sèvis èd pou lang ki disponib gratis pou ou. Rele 1-321-268-6111. (TTY: 1-800-955-8771)</p>
<p class="French"><strong>French</strong><br />
ATTENTION: Si vous parlez français, des services d'aidelinguistique vous sont proposés gratuitement. Appelez le 1-321-68-6111. (TTY: 1-800-955-8771)</p>
<p class="English"><strong>French</strong><br />
ATTENTION: Si vous parlez français, des services d'aidelinguistique vous sont proposés gratuitement. Appelez le 1-321-68-6111. (TTY: 1-800-955-8771)</p>
</div>
Now change the CSS to this
#targetarea:target .French{
background-color: #ffa;
-webkit-transition: all 1s linear;
Now you have more control over selection i.e. Only elements with class French will be highlighted
`

Using TTTAttributedLabel to format html code in UILabel

I'm using TTTAttributedLabel to show HTML code in UILabel that contains code (like bold, italic etc) and links.
This is my code
- (void)fetchText
{
NSMutableAttributedString * tmp = [[NSMutableAttributedString alloc] initWithData:self.genericInfo.getLocalizedDescription.toData
options:#{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute:#(NSUTF8StringEncoding)}
documentAttributes:nil
error:nil];
[self.labelText setText:tmp afterInheritingLabelAttributesAndConfiguringWithBlock:^ NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {
[mutableAttributedString addAttribute:NSFontAttributeName value:FONT_REGULAR(18.0f) range:NSMakeRange(0, tmp.length)];
return mutableAttributedString;
}];
}
The problem is I can't see any HTML bold or italic, but I can see only links.
There is a problem with my code or is a bug of TTTAttributedLabel?
Here the HTML contained in genericInfo.getLocalizedDescription
<p><strong>By subway</strong><br />
Take the Red line and get off at Rho Fiera Milano Expo stop.<br />
web: atm-mi.it<br />
download: underground map</p>
<p> </p>
<p><strong>By car</strong><br />
From the motorways A7-Genoa, A1 Bologna and A4-Turin take ring road west (tangenziale ovest) and go to fieramilano exit.<br />
From the A4-Venice motorway take the Pero-fieramilano exit.<br />
From the motorways A8-Varese and A9-Como at the Milano nord junction take the A4-Venice and go to fieramilano exit.<br />
From Milan follow the road signs to the motorways A8 Varese or A4 Turin and take the fieramilano exit.</p>
<p><strong>AREA C</strong><br />
Restrictive regulations will be imposed on cars entering downtown Milan (Area C - limited traffic area (Ztl).</p>
<p>web: areac.it</p>
<p><strong>By taxi</strong><br />
It is possible to reserve a taxi by calling one of the the following numbers:<br />
+39 02.8585 +39 02.6969 +39 02.4040 +39 02.4000 +39 02.5353</p>
<p><strong>By train</strong><br />
Milan exhibition venue is reachable by railway Passante, suburban lines S5 (Varese-Varese-Milano Passante-Treviglio) and S6 (Novara-Milano Passante -Treviglio); S5 and S6 stop directly in Rho Fiera Milano Expo Station.<br />
S5 and S6 lines are accessible from the heart of Milan in the following stations: Certosa, Villapizzone, Lancetti, Porta Garibaldi sotterranea, Repubblica, Porta Venezia, Dateo and Porta Vittoria.<br />
Further information, timetable and tickets purchasing: trenord.it/it/in-fiera.aspx<br />
Several inter-regional trains on the Turin-Novara-Milan line stop at the Rho Fiera Milano Expo station.<br />
A shuttle service connects the trains stations Rho and Rho Fiera Milano Expo.</p>
<p><strong>By plane</strong></p>
<p><em>From LINATE Airport</em><br />
Bus 73 and X73; get off in Piazza San Babila and take the subway, Red line, to Rho Fiera Milano Expo.<br />
During the exhibition days a bus transfer from/to Linate Airport is available:<br />
- departing from the airport, domestic arrivals area, from 8:30 to 13:30 and from 15:00 to 18:00, every hour.<br />
- departing from fieramilano, East Gate bus parking area, from 9:30 to 12:30 and from 14:00 to 19:00, every hour.</p>
<p><em>From MALPENSA Airport</em><br />
Take Malpensa Express train (Terminal 1 railway station) , directed to Milano Centrale Station – alight at Milano Porta Garibaldi and take Suburban railway lines S5 or S6 (13 minutes journey )<br />
Take Malpensa Express train (Terminal 1 railway station) , directed to Milano Cadorna Station (29 minutes journey on non stop trains). From there take the subway, Red line, to Rho Fiera Milano Expo.</p>
<p>Further information, timetable and tickets purchasing: www.trenord.it or www.malpensaexpress.it/</p>
<p><em>From ORIO AL SERIO Airport</em><br />
Direct bus transportation available only during events:<br />
- Orio Shuttle (€ 12.00/one way - € 20.00 round trip): departures from the airport, Arrival area, bus shelter 1, at 8:45, 9:15 and 10:30. Departures from Fiera Milano, East gate bus parking area, at 15:30, 16:30 and 18:00.</p>
<p>web: www.orioshuttle.com</p>
<p>Orio bus Express (€ 11.50/one way - € 19.50 round trip):<br />
departures from the airport, Arrivals, bus shelter 3/4, at: 8:30, 10:15 and 11:00. Departures from Fiera Milano at 15:15, 16:00 and 18:00 from East Gate bus parking area.</p>
<p>web: autostradale.it</p>
Edit: I think it's not automatic the bold and italic detection, you should add an attribute with the range of what you want bold and italic for example:
NSDictionary *attrs = #{ NSFontAttributeName: [UIFont LNHelveticaNeueLightOfSize:15 + [Menu prefLectura]],
NSForegroundColorAttributeName: [UIColor darkTextColor] };
NSDictionary *subAttrsMedium = #{
NSFontAttributeName:[UIFont LNHelveticaNeueMediumOfSize:15 + [Menu prefLectura]],
NSForegroundColorAttributeName:[UIColor blackColor] };
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:cell.contenido.text attributes:attrs];
NSRange range = [cell.contenido.text rangeOfString:[NSString stringWithFormat:#"%#",item[#"text"]]];
[attrString addAttributes:subAttrsMedium range:range];
I don't know if this could be a solution for you but it's the only way I could make it work
Using TTTAttributedLabel I've discovered that this has to be the order:
Create Attributed String like you want it to be (no changes to it after second step)
setText to label
(optional) add links detection
So, you should invert these 2 lines:
[mutableAttributedString addAttribute:NSFontAttributeName value:FONT_REGULAR(18.0f) range:NSMakeRange(0, tmp.length)];
[self.labelText setText:tmp afterInheritingLabelAttributesAndConfiguringWithBlock:^ NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {
Hope it helps

Cannot get CSS item

I ran into difficulty getting a radio schedule from http://www.franceculture.fr/programmes#/2014-01-26
My code is:
require 'rubygems'
require 'nokogiri'
require 'open-uri'
file=File.open('/Users/hubertus/Dropbox/Apps/Drafts/radio/franceculture-2014-01-29-17-10- 34.txt', 'r')
url=file.readline
target=file.readline
f = File.open('/Users/hubertus/Desktop/output.txt', 'w')
doc = Nokogiri::HTML(open(url))
doc.css(".actionnable").each do |item|
#puts item
heure = item.at_css(".plage").text
text = item.at_css("a").text
description = item.at_css(':nth-child(3)').text
link =item.at_css('a')[:href]
f.puts "#{heure} - #{text} -#{description} - #{link}"
end
f.close
namesarr=File.read('/Users/hubertus/Desktop/output.txt').split(/\n/)
puts namesarr.select{ |i| i < target }.max
file.close
I want to get the later CSS items, as in the following HTML, I would like to get the second link (href:/emission-un-autre-jour-est-possible-pixar-%C2%AB-25-ans- d%E2%80%99animation-exposition-metamorphoses-de-la-foret-)
and its title (Pixar « 25 ans d’animation " exposition m de la for guyanaise : s>Pixar « 25 ans d’animation "Exposition / Métamorphoses de la forêt guyanaise : série)
<li class="actionnable">
<span class="plage">06:00</span>
<h2>Un autre jour est possible </h2>
<p> Production : Tewfik Hakem. Réalisation : Thomas Dutter. </p>
<img src="/sites/all/themes/franceculture/images/down.png" width="20" height="20" alt="déplier/replier" class="action"><ul>
<li>
<span>06:00</span><a href="/emission-un-autre-jour-est-possible-pixar-%C2%AB-25-ans- d%E2%80%99animation-exposition-metamorphoses-de-la-foret-" title="Pixar « 25 ans d’animation " exposition m de la for guyanaise : s>Pixar « 25 ans d’animation "Exposition / Métamorphoses de la forêt guyanaise : série</a>
<p>
</p>
</li>
</ul>
<div class="clearer"></div>
</li>
Does anyone have an idea how to get this with CSS selectors?

Code Golf: Phone Number to Words

Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
Guidelines for code-golf on SO
We've all seen phone numbers that are put into words: 1-800-BUY-MORE, etc.
What is the shortest amount of code you can write that will produce all the possible combinations of words for a 7 digit US phone number.
Input will be a seven-digit integer (or string, if that is simpler), and assume that the input is properly formed.
Output will be a list of seven-character strings that
For instance, the number 428-5246 would produce
GATJAGM
GATJAGN
GATJAGO
GATJAHM
GATJAHN
GATJAGO
GATJAIM
GATJAIN
GATJAIO
and so on.....
Winning criterion will be code from any language with the fewest characters that produces every possible letter combination.
Additional Notes:
To make it more interesting, words
can be formed only by using the
letters on a North American Classic
Key Pad phone with three letters
per number as defined here.That means that Z and Q are excluded.
For the number '1', put a space.
For the number '0', put a hyphen '-'
Bonus points awarded for recognizing output as real English words. Okay, not really. ;-)
Added: Okay, lets go with "Nick's Modified North American Classic Key Pad" which has an 'O' (oh, not zero) on the 6 key.
Python, 107 chars
f=lambda p:p and[i+j for i in'O 1 ABC DEF GHI JKL MN PRS TUV WXY'.split()
[int(p[0])]for j in f(p[1:])]or[p]
Python, 122 chars (older version with reduce)
f=lambda p:reduce(lambda x,y:[i+j for i in x for j in y],
['O 1 ABC DEF GHI JKL MN PRS TUV WXY'.split()[int(k)]for k in p])
ps. Gimme some "thumbs up", new here and i need the votes
Example use:
>>> len(f('4285246'))
1458
>>> f('4285246')
['GATJAGM', 'GATJAGN', 'GATJAHM', 'GATJAHN', 'GATJAIM', 'GATJAIN', 'GATJBGM', 'GATJBGN', 'GATJBHM', 'GATJBHN', 'GATJBIM', 'GATJBIN', 'GATJCGM', 'GATJCGN', 'GATJCHM', 'GATJCHN', 'GATJCIM', 'GATJCIN', 'GATKAGM', 'GATKAGN', 'GATKAHM', 'GATKAHN', 'GATKAIM', 'GATKAIN', 'GATKBGM', 'GATKBGN', 'GATKBHM', 'GATKBHN', 'GATKBIM', 'GATKBIN', 'GATKCGM', 'GATKCGN', 'GATKCHM', 'GATKCHN', 'GATKCIM', 'GATKCIN', 'GATLAGM', 'GATLAGN', 'GATLAHM', 'GATLAHN', 'GATLAIM', 'GATLAIN', 'GATLBGM', 'GATLBGN', 'GATLBHM', 'GATLBHN', 'GATLBIM', 'GATLBIN', 'GATLCGM', 'GATLCGN', 'GATLCHM', 'GATLCHN', 'GATLCIM', 'GATLCIN', 'GAUJAGM', 'GAUJAGN', 'GAUJAHM', 'GAUJAHN', 'GAUJAIM', 'GAUJAIN', 'GAUJBGM', 'GAUJBGN', 'GAUJBHM', 'GAUJBHN', 'GAUJBIM', 'GAUJBIN', 'GAUJCGM', 'GAUJCGN', 'GAUJCHM', 'GAUJCHN', 'GAUJCIM', 'GAUJCIN', 'GAUKAGM', 'GAUKAGN', 'GAUKAHM', 'GAUKAHN', 'GAUKAIM', 'GAUKAIN', 'GAUKBGM', 'GAUKBGN', 'GAUKBHM', 'GAUKBHN', 'GAUKBIM', 'GAUKBIN', 'GAUKCGM', 'GAUKCGN', 'GAUKCHM', 'GAUKCHN', 'GAUKCIM', 'GAUKCIN', 'GAULAGM', 'GAULAGN', 'GAULAHM', 'GAULAHN', 'GAULAIM', 'GAULAIN', 'GAULBGM', 'GAULBGN', 'GAULBHM', 'GAULBHN', 'GAULBIM', 'GAULBIN', 'GAULCGM', 'GAULCGN', 'GAULCHM', 'GAULCHN', 'GAULCIM', 'GAULCIN', 'GAVJAGM', 'GAVJAGN', 'GAVJAHM', 'GAVJAHN', 'GAVJAIM', 'GAVJAIN', 'GAVJBGM', 'GAVJBGN', 'GAVJBHM', 'GAVJBHN', 'GAVJBIM', 'GAVJBIN', 'GAVJCGM', 'GAVJCGN', 'GAVJCHM', 'GAVJCHN', 'GAVJCIM', 'GAVJCIN', 'GAVKAGM', 'GAVKAGN', 'GAVKAHM', 'GAVKAHN', 'GAVKAIM', 'GAVKAIN', 'GAVKBGM', 'GAVKBGN', 'GAVKBHM', 'GAVKBHN', 'GAVKBIM', 'GAVKBIN', 'GAVKCGM', 'GAVKCGN', 'GAVKCHM', 'GAVKCHN', 'GAVKCIM', 'GAVKCIN', 'GAVLAGM', 'GAVLAGN', 'GAVLAHM', 'GAVLAHN', 'GAVLAIM', 'GAVLAIN', 'GAVLBGM', 'GAVLBGN', 'GAVLBHM', 'GAVLBHN', 'GAVLBIM', 'GAVLBIN', 'GAVLCGM', 'GAVLCGN', 'GAVLCHM', 'GAVLCHN', 'GAVLCIM', 'GAVLCIN', 'GBTJAGM', 'GBTJAGN', 'GBTJAHM', 'GBTJAHN', 'GBTJAIM', 'GBTJAIN', 'GBTJBGM', 'GBTJBGN', 'GBTJBHM', 'GBTJBHN', 'GBTJBIM', 'GBTJBIN', 'GBTJCGM', 'GBTJCGN', 'GBTJCHM', 'GBTJCHN', 'GBTJCIM', 'GBTJCIN', 'GBTKAGM', 'GBTKAGN', 'GBTKAHM', 'GBTKAHN', 'GBTKAIM', 'GBTKAIN', 'GBTKBGM', 'GBTKBGN', 'GBTKBHM', 'GBTKBHN', 'GBTKBIM', 'GBTKBIN', 'GBTKCGM', 'GBTKCGN', 'GBTKCHM', 'GBTKCHN', 'GBTKCIM', 'GBTKCIN', 'GBTLAGM', 'GBTLAGN', 'GBTLAHM', 'GBTLAHN', 'GBTLAIM', 'GBTLAIN', 'GBTLBGM', 'GBTLBGN', 'GBTLBHM', 'GBTLBHN', 'GBTLBIM', 'GBTLBIN', 'GBTLCGM', 'GBTLCGN', 'GBTLCHM', 'GBTLCHN', 'GBTLCIM', 'GBTLCIN', 'GBUJAGM', 'GBUJAGN', 'GBUJAHM', 'GBUJAHN', 'GBUJAIM', 'GBUJAIN', 'GBUJBGM', 'GBUJBGN', 'GBUJBHM', 'GBUJBHN', 'GBUJBIM', 'GBUJBIN', 'GBUJCGM', 'GBUJCGN', 'GBUJCHM', 'GBUJCHN', 'GBUJCIM', 'GBUJCIN', 'GBUKAGM', 'GBUKAGN', 'GBUKAHM', 'GBUKAHN', 'GBUKAIM', 'GBUKAIN', 'GBUKBGM', 'GBUKBGN', 'GBUKBHM', 'GBUKBHN', 'GBUKBIM', 'GBUKBIN', 'GBUKCGM', 'GBUKCGN', 'GBUKCHM', 'GBUKCHN', 'GBUKCIM', 'GBUKCIN', 'GBULAGM', 'GBULAGN', 'GBULAHM', 'GBULAHN', 'GBULAIM', 'GBULAIN', 'GBULBGM', 'GBULBGN', 'GBULBHM', 'GBULBHN', 'GBULBIM', 'GBULBIN', 'GBULCGM', 'GBULCGN', 'GBULCHM', 'GBULCHN', 'GBULCIM', 'GBULCIN', 'GBVJAGM', 'GBVJAGN', 'GBVJAHM', 'GBVJAHN', 'GBVJAIM', 'GBVJAIN', 'GBVJBGM', 'GBVJBGN', 'GBVJBHM', 'GBVJBHN', 'GBVJBIM', 'GBVJBIN', 'GBVJCGM', 'GBVJCGN', 'GBVJCHM', 'GBVJCHN', 'GBVJCIM', 'GBVJCIN', 'GBVKAGM', 'GBVKAGN', 'GBVKAHM', 'GBVKAHN', 'GBVKAIM', 'GBVKAIN', 'GBVKBGM', 'GBVKBGN', 'GBVKBHM', 'GBVKBHN', 'GBVKBIM', 'GBVKBIN', 'GBVKCGM', 'GBVKCGN', 'GBVKCHM', 'GBVKCHN', 'GBVKCIM', 'GBVKCIN', 'GBVLAGM', 'GBVLAGN', 'GBVLAHM', 'GBVLAHN', 'GBVLAIM', 'GBVLAIN', 'GBVLBGM', 'GBVLBGN', 'GBVLBHM', 'GBVLBHN', 'GBVLBIM', 'GBVLBIN', 'GBVLCGM', 'GBVLCGN', 'GBVLCHM', 'GBVLCHN', 'GBVLCIM', 'GBVLCIN', 'GCTJAGM', 'GCTJAGN', 'GCTJAHM', 'GCTJAHN', 'GCTJAIM', 'GCTJAIN', 'GCTJBGM', 'GCTJBGN', 'GCTJBHM', 'GCTJBHN', 'GCTJBIM', 'GCTJBIN', 'GCTJCGM', 'GCTJCGN', 'GCTJCHM', 'GCTJCHN', 'GCTJCIM', 'GCTJCIN', 'GCTKAGM', 'GCTKAGN', 'GCTKAHM', 'GCTKAHN', 'GCTKAIM', 'GCTKAIN', 'GCTKBGM', 'GCTKBGN', 'GCTKBHM', 'GCTKBHN', 'GCTKBIM', 'GCTKBIN', 'GCTKCGM', 'GCTKCGN', 'GCTKCHM', 'GCTKCHN', 'GCTKCIM', 'GCTKCIN', 'GCTLAGM', 'GCTLAGN', 'GCTLAHM', 'GCTLAHN', 'GCTLAIM', 'GCTLAIN', 'GCTLBGM', 'GCTLBGN', 'GCTLBHM', 'GCTLBHN', 'GCTLBIM', 'GCTLBIN', 'GCTLCGM', 'GCTLCGN', 'GCTLCHM', 'GCTLCHN', 'GCTLCIM', 'GCTLCIN', 'GCUJAGM', 'GCUJAGN', 'GCUJAHM', 'GCUJAHN', 'GCUJAIM', 'GCUJAIN', 'GCUJBGM', 'GCUJBGN', 'GCUJBHM', 'GCUJBHN', 'GCUJBIM', 'GCUJBIN', 'GCUJCGM', 'GCUJCGN', 'GCUJCHM', 'GCUJCHN', 'GCUJCIM', 'GCUJCIN', 'GCUKAGM', 'GCUKAGN', 'GCUKAHM', 'GCUKAHN', 'GCUKAIM', 'GCUKAIN', 'GCUKBGM', 'GCUKBGN', 'GCUKBHM', 'GCUKBHN', 'GCUKBIM', 'GCUKBIN', 'GCUKCGM', 'GCUKCGN', 'GCUKCHM', 'GCUKCHN', 'GCUKCIM', 'GCUKCIN', 'GCULAGM', 'GCULAGN', 'GCULAHM', 'GCULAHN', 'GCULAIM', 'GCULAIN', 'GCULBGM', 'GCULBGN', 'GCULBHM', 'GCULBHN', 'GCULBIM', 'GCULBIN', 'GCULCGM', 'GCULCGN', 'GCULCHM', 'GCULCHN', 'GCULCIM', 'GCULCIN', 'GCVJAGM', 'GCVJAGN', 'GCVJAHM', 'GCVJAHN', 'GCVJAIM', 'GCVJAIN', 'GCVJBGM', 'GCVJBGN', 'GCVJBHM', 'GCVJBHN', 'GCVJBIM', 'GCVJBIN', 'GCVJCGM', 'GCVJCGN', 'GCVJCHM', 'GCVJCHN', 'GCVJCIM', 'GCVJCIN', 'GCVKAGM', 'GCVKAGN', 'GCVKAHM', 'GCVKAHN', 'GCVKAIM', 'GCVKAIN', 'GCVKBGM', 'GCVKBGN', 'GCVKBHM', 'GCVKBHN', 'GCVKBIM', 'GCVKBIN', 'GCVKCGM', 'GCVKCGN', 'GCVKCHM', 'GCVKCHN', 'GCVKCIM', 'GCVKCIN', 'GCVLAGM', 'GCVLAGN', 'GCVLAHM', 'GCVLAHN', 'GCVLAIM', 'GCVLAIN', 'GCVLBGM', 'GCVLBGN', 'GCVLBHM', 'GCVLBHN', 'GCVLBIM', 'GCVLBIN', 'GCVLCGM', 'GCVLCGN', 'GCVLCHM', 'GCVLCHN', 'GCVLCIM', 'GCVLCIN', 'HATJAGM', 'HATJAGN', 'HATJAHM', 'HATJAHN', 'HATJAIM', 'HATJAIN', 'HATJBGM', 'HATJBGN', 'HATJBHM', 'HATJBHN', 'HATJBIM', 'HATJBIN', 'HATJCGM', 'HATJCGN', 'HATJCHM', 'HATJCHN', 'HATJCIM', 'HATJCIN', 'HATKAGM', 'HATKAGN', 'HATKAHM', 'HATKAHN', 'HATKAIM', 'HATKAIN', 'HATKBGM', 'HATKBGN', 'HATKBHM', 'HATKBHN', 'HATKBIM', 'HATKBIN', 'HATKCGM', 'HATKCGN', 'HATKCHM', 'HATKCHN', 'HATKCIM', 'HATKCIN', 'HATLAGM', 'HATLAGN', 'HATLAHM', 'HATLAHN', 'HATLAIM', 'HATLAIN', 'HATLBGM', 'HATLBGN', 'HATLBHM', 'HATLBHN', 'HATLBIM', 'HATLBIN', 'HATLCGM', 'HATLCGN', 'HATLCHM', 'HATLCHN', 'HATLCIM', 'HATLCIN', 'HAUJAGM', 'HAUJAGN', 'HAUJAHM', 'HAUJAHN', 'HAUJAIM', 'HAUJAIN', 'HAUJBGM', 'HAUJBGN', 'HAUJBHM', 'HAUJBHN', 'HAUJBIM', 'HAUJBIN', 'HAUJCGM', 'HAUJCGN', 'HAUJCHM', 'HAUJCHN', 'HAUJCIM', 'HAUJCIN', 'HAUKAGM', 'HAUKAGN', 'HAUKAHM', 'HAUKAHN', 'HAUKAIM', 'HAUKAIN', 'HAUKBGM', 'HAUKBGN', 'HAUKBHM', 'HAUKBHN', 'HAUKBIM', 'HAUKBIN', 'HAUKCGM', 'HAUKCGN', 'HAUKCHM', 'HAUKCHN', 'HAUKCIM', 'HAUKCIN', 'HAULAGM', 'HAULAGN', 'HAULAHM', 'HAULAHN', 'HAULAIM', 'HAULAIN', 'HAULBGM', 'HAULBGN', 'HAULBHM', 'HAULBHN', 'HAULBIM', 'HAULBIN', 'HAULCGM', 'HAULCGN', 'HAULCHM', 'HAULCHN', 'HAULCIM', 'HAULCIN', 'HAVJAGM', 'HAVJAGN', 'HAVJAHM', 'HAVJAHN', 'HAVJAIM', 'HAVJAIN', 'HAVJBGM', 'HAVJBGN', 'HAVJBHM', 'HAVJBHN', 'HAVJBIM', 'HAVJBIN', 'HAVJCGM', 'HAVJCGN', 'HAVJCHM', 'HAVJCHN', 'HAVJCIM', 'HAVJCIN', 'HAVKAGM', 'HAVKAGN', 'HAVKAHM', 'HAVKAHN', 'HAVKAIM', 'HAVKAIN', 'HAVKBGM', 'HAVKBGN', 'HAVKBHM', 'HAVKBHN', 'HAVKBIM', 'HAVKBIN', 'HAVKCGM', 'HAVKCGN', 'HAVKCHM', 'HAVKCHN', 'HAVKCIM', 'HAVKCIN', 'HAVLAGM', 'HAVLAGN', 'HAVLAHM', 'HAVLAHN', 'HAVLAIM', 'HAVLAIN', 'HAVLBGM', 'HAVLBGN', 'HAVLBHM', 'HAVLBHN', 'HAVLBIM', 'HAVLBIN', 'HAVLCGM', 'HAVLCGN', 'HAVLCHM', 'HAVLCHN', 'HAVLCIM', 'HAVLCIN', 'HBTJAGM', 'HBTJAGN', 'HBTJAHM', 'HBTJAHN', 'HBTJAIM', 'HBTJAIN', 'HBTJBGM', 'HBTJBGN', 'HBTJBHM', 'HBTJBHN', 'HBTJBIM', 'HBTJBIN', 'HBTJCGM', 'HBTJCGN', 'HBTJCHM', 'HBTJCHN', 'HBTJCIM', 'HBTJCIN', 'HBTKAGM', 'HBTKAGN', 'HBTKAHM', 'HBTKAHN', 'HBTKAIM', 'HBTKAIN', 'HBTKBGM', 'HBTKBGN', 'HBTKBHM', 'HBTKBHN', 'HBTKBIM', 'HBTKBIN', 'HBTKCGM', 'HBTKCGN', 'HBTKCHM', 'HBTKCHN', 'HBTKCIM', 'HBTKCIN', 'HBTLAGM', 'HBTLAGN', 'HBTLAHM', 'HBTLAHN', 'HBTLAIM', 'HBTLAIN', 'HBTLBGM', 'HBTLBGN', 'HBTLBHM', 'HBTLBHN', 'HBTLBIM', 'HBTLBIN', 'HBTLCGM', 'HBTLCGN', 'HBTLCHM', 'HBTLCHN', 'HBTLCIM', 'HBTLCIN', 'HBUJAGM', 'HBUJAGN', 'HBUJAHM', 'HBUJAHN', 'HBUJAIM', 'HBUJAIN', 'HBUJBGM', 'HBUJBGN', 'HBUJBHM', 'HBUJBHN', 'HBUJBIM', 'HBUJBIN', 'HBUJCGM', 'HBUJCGN', 'HBUJCHM', 'HBUJCHN', 'HBUJCIM', 'HBUJCIN', 'HBUKAGM', 'HBUKAGN', 'HBUKAHM', 'HBUKAHN', 'HBUKAIM', 'HBUKAIN', 'HBUKBGM', 'HBUKBGN', 'HBUKBHM', 'HBUKBHN', 'HBUKBIM', 'HBUKBIN', 'HBUKCGM', 'HBUKCGN', 'HBUKCHM', 'HBUKCHN', 'HBUKCIM', 'HBUKCIN', 'HBULAGM', 'HBULAGN', 'HBULAHM', 'HBULAHN', 'HBULAIM', 'HBULAIN', 'HBULBGM', 'HBULBGN', 'HBULBHM', 'HBULBHN', 'HBULBIM', 'HBULBIN', 'HBULCGM', 'HBULCGN', 'HBULCHM', 'HBULCHN', 'HBULCIM', 'HBULCIN', 'HBVJAGM', 'HBVJAGN', 'HBVJAHM', 'HBVJAHN', 'HBVJAIM', 'HBVJAIN', 'HBVJBGM', 'HBVJBGN', 'HBVJBHM', 'HBVJBHN', 'HBVJBIM', 'HBVJBIN', 'HBVJCGM', 'HBVJCGN', 'HBVJCHM', 'HBVJCHN', 'HBVJCIM', 'HBVJCIN', 'HBVKAGM', 'HBVKAGN', 'HBVKAHM', 'HBVKAHN', 'HBVKAIM', 'HBVKAIN', 'HBVKBGM', 'HBVKBGN', 'HBVKBHM', 'HBVKBHN', 'HBVKBIM', 'HBVKBIN', 'HBVKCGM', 'HBVKCGN', 'HBVKCHM', 'HBVKCHN', 'HBVKCIM', 'HBVKCIN', 'HBVLAGM', 'HBVLAGN', 'HBVLAHM', 'HBVLAHN', 'HBVLAIM', 'HBVLAIN', 'HBVLBGM', 'HBVLBGN', 'HBVLBHM', 'HBVLBHN', 'HBVLBIM', 'HBVLBIN', 'HBVLCGM', 'HBVLCGN', 'HBVLCHM', 'HBVLCHN', 'HBVLCIM', 'HBVLCIN', 'HCTJAGM', 'HCTJAGN', 'HCTJAHM', 'HCTJAHN', 'HCTJAIM', 'HCTJAIN', 'HCTJBGM', 'HCTJBGN', 'HCTJBHM', 'HCTJBHN', 'HCTJBIM', 'HCTJBIN', 'HCTJCGM', 'HCTJCGN', 'HCTJCHM', 'HCTJCHN', 'HCTJCIM', 'HCTJCIN', 'HCTKAGM', 'HCTKAGN', 'HCTKAHM', 'HCTKAHN', 'HCTKAIM', 'HCTKAIN', 'HCTKBGM', 'HCTKBGN', 'HCTKBHM', 'HCTKBHN', 'HCTKBIM', 'HCTKBIN', 'HCTKCGM', 'HCTKCGN', 'HCTKCHM', 'HCTKCHN', 'HCTKCIM', 'HCTKCIN', 'HCTLAGM', 'HCTLAGN', 'HCTLAHM', 'HCTLAHN', 'HCTLAIM', 'HCTLAIN', 'HCTLBGM', 'HCTLBGN', 'HCTLBHM', 'HCTLBHN', 'HCTLBIM', 'HCTLBIN', 'HCTLCGM', 'HCTLCGN', 'HCTLCHM', 'HCTLCHN', 'HCTLCIM', 'HCTLCIN', 'HCUJAGM', 'HCUJAGN', 'HCUJAHM', 'HCUJAHN', 'HCUJAIM', 'HCUJAIN', 'HCUJBGM', 'HCUJBGN', 'HCUJBHM', 'HCUJBHN', 'HCUJBIM', 'HCUJBIN', 'HCUJCGM', 'HCUJCGN', 'HCUJCHM', 'HCUJCHN', 'HCUJCIM', 'HCUJCIN', 'HCUKAGM', 'HCUKAGN', 'HCUKAHM', 'HCUKAHN', 'HCUKAIM', 'HCUKAIN', 'HCUKBGM', 'HCUKBGN', 'HCUKBHM', 'HCUKBHN', 'HCUKBIM', 'HCUKBIN', 'HCUKCGM', 'HCUKCGN', 'HCUKCHM', 'HCUKCHN', 'HCUKCIM', 'HCUKCIN', 'HCULAGM', 'HCULAGN', 'HCULAHM', 'HCULAHN', 'HCULAIM', 'HCULAIN', 'HCULBGM', 'HCULBGN', 'HCULBHM', 'HCULBHN', 'HCULBIM', 'HCULBIN', 'HCULCGM', 'HCULCGN', 'HCULCHM', 'HCULCHN', 'HCULCIM', 'HCULCIN', 'HCVJAGM', 'HCVJAGN', 'HCVJAHM', 'HCVJAHN', 'HCVJAIM', 'HCVJAIN', 'HCVJBGM', 'HCVJBGN', 'HCVJBHM', 'HCVJBHN', 'HCVJBIM', 'HCVJBIN', 'HCVJCGM', 'HCVJCGN', 'HCVJCHM', 'HCVJCHN', 'HCVJCIM', 'HCVJCIN', 'HCVKAGM', 'HCVKAGN', 'HCVKAHM', 'HCVKAHN', 'HCVKAIM', 'HCVKAIN', 'HCVKBGM', 'HCVKBGN', 'HCVKBHM', 'HCVKBHN', 'HCVKBIM', 'HCVKBIN', 'HCVKCGM', 'HCVKCGN', 'HCVKCHM', 'HCVKCHN', 'HCVKCIM', 'HCVKCIN', 'HCVLAGM', 'HCVLAGN', 'HCVLAHM', 'HCVLAHN', 'HCVLAIM', 'HCVLAIN', 'HCVLBGM', 'HCVLBGN', 'HCVLBHM', 'HCVLBHN', 'HCVLBIM', 'HCVLBIN', 'HCVLCGM', 'HCVLCGN', 'HCVLCHM', 'HCVLCHN', 'HCVLCIM', 'HCVLCIN', 'IATJAGM', 'IATJAGN', 'IATJAHM', 'IATJAHN', 'IATJAIM', 'IATJAIN', 'IATJBGM', 'IATJBGN', 'IATJBHM', 'IATJBHN', 'IATJBIM', 'IATJBIN', 'IATJCGM', 'IATJCGN', 'IATJCHM', 'IATJCHN', 'IATJCIM', 'IATJCIN', 'IATKAGM', 'IATKAGN', 'IATKAHM', 'IATKAHN', 'IATKAIM', 'IATKAIN', 'IATKBGM', 'IATKBGN', 'IATKBHM', 'IATKBHN', 'IATKBIM', 'IATKBIN', 'IATKCGM', 'IATKCGN', 'IATKCHM', 'IATKCHN', 'IATKCIM', 'IATKCIN', 'IATLAGM', 'IATLAGN', 'IATLAHM', 'IATLAHN', 'IATLAIM', 'IATLAIN', 'IATLBGM', 'IATLBGN', 'IATLBHM', 'IATLBHN', 'IATLBIM', 'IATLBIN', 'IATLCGM', 'IATLCGN', 'IATLCHM', 'IATLCHN', 'IATLCIM', 'IATLCIN', 'IAUJAGM', 'IAUJAGN', 'IAUJAHM', 'IAUJAHN', 'IAUJAIM', 'IAUJAIN', 'IAUJBGM', 'IAUJBGN', 'IAUJBHM', 'IAUJBHN', 'IAUJBIM', 'IAUJBIN', 'IAUJCGM', 'IAUJCGN', 'IAUJCHM', 'IAUJCHN', 'IAUJCIM', 'IAUJCIN', 'IAUKAGM', 'IAUKAGN', 'IAUKAHM', 'IAUKAHN', 'IAUKAIM', 'IAUKAIN', 'IAUKBGM', 'IAUKBGN', 'IAUKBHM', 'IAUKBHN', 'IAUKBIM', 'IAUKBIN', 'IAUKCGM', 'IAUKCGN', 'IAUKCHM', 'IAUKCHN', 'IAUKCIM', 'IAUKCIN', 'IAULAGM', 'IAULAGN', 'IAULAHM', 'IAULAHN', 'IAULAIM', 'IAULAIN', 'IAULBGM', 'IAULBGN', 'IAULBHM', 'IAULBHN', 'IAULBIM', 'IAULBIN', 'IAULCGM', 'IAULCGN', 'IAULCHM', 'IAULCHN', 'IAULCIM', 'IAULCIN', 'IAVJAGM', 'IAVJAGN', 'IAVJAHM', 'IAVJAHN', 'IAVJAIM', 'IAVJAIN', 'IAVJBGM', 'IAVJBGN', 'IAVJBHM', 'IAVJBHN', 'IAVJBIM', 'IAVJBIN', 'IAVJCGM', 'IAVJCGN', 'IAVJCHM', 'IAVJCHN', 'IAVJCIM', 'IAVJCIN', 'IAVKAGM', 'IAVKAGN', 'IAVKAHM', 'IAVKAHN', 'IAVKAIM', 'IAVKAIN', 'IAVKBGM', 'IAVKBGN', 'IAVKBHM', 'IAVKBHN', 'IAVKBIM', 'IAVKBIN', 'IAVKCGM', 'IAVKCGN', 'IAVKCHM', 'IAVKCHN', 'IAVKCIM', 'IAVKCIN', 'IAVLAGM', 'IAVLAGN', 'IAVLAHM', 'IAVLAHN', 'IAVLAIM', 'IAVLAIN', 'IAVLBGM', 'IAVLBGN', 'IAVLBHM', 'IAVLBHN', 'IAVLBIM', 'IAVLBIN', 'IAVLCGM', 'IAVLCGN', 'IAVLCHM', 'IAVLCHN', 'IAVLCIM', 'IAVLCIN', 'IBTJAGM', 'IBTJAGN', 'IBTJAHM', 'IBTJAHN', 'IBTJAIM', 'IBTJAIN', 'IBTJBGM', 'IBTJBGN', 'IBTJBHM', 'IBTJBHN', 'IBTJBIM', 'IBTJBIN', 'IBTJCGM', 'IBTJCGN', 'IBTJCHM', 'IBTJCHN', 'IBTJCIM', 'IBTJCIN', 'IBTKAGM', 'IBTKAGN', 'IBTKAHM', 'IBTKAHN', 'IBTKAIM', 'IBTKAIN', 'IBTKBGM', 'IBTKBGN', 'IBTKBHM', 'IBTKBHN', 'IBTKBIM', 'IBTKBIN', 'IBTKCGM', 'IBTKCGN', 'IBTKCHM', 'IBTKCHN', 'IBTKCIM', 'IBTKCIN', 'IBTLAGM', 'IBTLAGN', 'IBTLAHM', 'IBTLAHN', 'IBTLAIM', 'IBTLAIN', 'IBTLBGM', 'IBTLBGN', 'IBTLBHM', 'IBTLBHN', 'IBTLBIM', 'IBTLBIN', 'IBTLCGM', 'IBTLCGN', 'IBTLCHM', 'IBTLCHN', 'IBTLCIM', 'IBTLCIN', 'IBUJAGM', 'IBUJAGN', 'IBUJAHM', 'IBUJAHN', 'IBUJAIM', 'IBUJAIN', 'IBUJBGM', 'IBUJBGN', 'IBUJBHM', 'IBUJBHN', 'IBUJBIM', 'IBUJBIN', 'IBUJCGM', 'IBUJCGN', 'IBUJCHM', 'IBUJCHN', 'IBUJCIM', 'IBUJCIN', 'IBUKAGM', 'IBUKAGN', 'IBUKAHM', 'IBUKAHN', 'IBUKAIM', 'IBUKAIN', 'IBUKBGM', 'IBUKBGN', 'IBUKBHM', 'IBUKBHN', 'IBUKBIM', 'IBUKBIN', 'IBUKCGM', 'IBUKCGN', 'IBUKCHM', 'IBUKCHN', 'IBUKCIM', 'IBUKCIN', 'IBULAGM', 'IBULAGN', 'IBULAHM', 'IBULAHN', 'IBULAIM', 'IBULAIN', 'IBULBGM', 'IBULBGN', 'IBULBHM', 'IBULBHN', 'IBULBIM', 'IBULBIN', 'IBULCGM', 'IBULCGN', 'IBULCHM', 'IBULCHN', 'IBULCIM', 'IBULCIN', 'IBVJAGM', 'IBVJAGN', 'IBVJAHM', 'IBVJAHN', 'IBVJAIM', 'IBVJAIN', 'IBVJBGM', 'IBVJBGN', 'IBVJBHM', 'IBVJBHN', 'IBVJBIM', 'IBVJBIN', 'IBVJCGM', 'IBVJCGN', 'IBVJCHM', 'IBVJCHN', 'IBVJCIM', 'IBVJCIN', 'IBVKAGM', 'IBVKAGN', 'IBVKAHM', 'IBVKAHN', 'IBVKAIM', 'IBVKAIN', 'IBVKBGM', 'IBVKBGN', 'IBVKBHM', 'IBVKBHN', 'IBVKBIM', 'IBVKBIN', 'IBVKCGM', 'IBVKCGN', 'IBVKCHM', 'IBVKCHN', 'IBVKCIM', 'IBVKCIN', 'IBVLAGM', 'IBVLAGN', 'IBVLAHM', 'IBVLAHN', 'IBVLAIM', 'IBVLAIN', 'IBVLBGM', 'IBVLBGN', 'IBVLBHM', 'IBVLBHN', 'IBVLBIM', 'IBVLBIN', 'IBVLCGM', 'IBVLCGN', 'IBVLCHM', 'IBVLCHN', 'IBVLCIM', 'IBVLCIN', 'ICTJAGM', 'ICTJAGN', 'ICTJAHM', 'ICTJAHN', 'ICTJAIM', 'ICTJAIN', 'ICTJBGM', 'ICTJBGN', 'ICTJBHM', 'ICTJBHN', 'ICTJBIM', 'ICTJBIN', 'ICTJCGM', 'ICTJCGN', 'ICTJCHM', 'ICTJCHN', 'ICTJCIM', 'ICTJCIN', 'ICTKAGM', 'ICTKAGN', 'ICTKAHM', 'ICTKAHN', 'ICTKAIM', 'ICTKAIN', 'ICTKBGM', 'ICTKBGN', 'ICTKBHM', 'ICTKBHN', 'ICTKBIM', 'ICTKBIN', 'ICTKCGM', 'ICTKCGN', 'ICTKCHM', 'ICTKCHN', 'ICTKCIM', 'ICTKCIN', 'ICTLAGM', 'ICTLAGN', 'ICTLAHM', 'ICTLAHN', 'ICTLAIM', 'ICTLAIN', 'ICTLBGM', 'ICTLBGN', 'ICTLBHM', 'ICTLBHN', 'ICTLBIM', 'ICTLBIN', 'ICTLCGM', 'ICTLCGN', 'ICTLCHM', 'ICTLCHN', 'ICTLCIM', 'ICTLCIN', 'ICUJAGM', 'ICUJAGN', 'ICUJAHM', 'ICUJAHN', 'ICUJAIM', 'ICUJAIN', 'ICUJBGM', 'ICUJBGN', 'ICUJBHM', 'ICUJBHN', 'ICUJBIM', 'ICUJBIN', 'ICUJCGM', 'ICUJCGN', 'ICUJCHM', 'ICUJCHN', 'ICUJCIM', 'ICUJCIN', 'ICUKAGM', 'ICUKAGN', 'ICUKAHM', 'ICUKAHN', 'ICUKAIM', 'ICUKAIN', 'ICUKBGM', 'ICUKBGN', 'ICUKBHM', 'ICUKBHN', 'ICUKBIM', 'ICUKBIN', 'ICUKCGM', 'ICUKCGN', 'ICUKCHM', 'ICUKCHN', 'ICUKCIM', 'ICUKCIN', 'ICULAGM', 'ICULAGN', 'ICULAHM', 'ICULAHN', 'ICULAIM', 'ICULAIN', 'ICULBGM', 'ICULBGN', 'ICULBHM', 'ICULBHN', 'ICULBIM', 'ICULBIN', 'ICULCGM', 'ICULCGN', 'ICULCHM', 'ICULCHN', 'ICULCIM', 'ICULCIN', 'ICVJAGM', 'ICVJAGN', 'ICVJAHM', 'ICVJAHN', 'ICVJAIM', 'ICVJAIN', 'ICVJBGM', 'ICVJBGN', 'ICVJBHM', 'ICVJBHN', 'ICVJBIM', 'ICVJBIN', 'ICVJCGM', 'ICVJCGN', 'ICVJCHM', 'ICVJCHN', 'ICVJCIM', 'ICVJCIN', 'ICVKAGM', 'ICVKAGN', 'ICVKAHM', 'ICVKAHN', 'ICVKAIM', 'ICVKAIN', 'ICVKBGM', 'ICVKBGN', 'ICVKBHM', 'ICVKBHN', 'ICVKBIM', 'ICVKBIN', 'ICVKCGM', 'ICVKCGN', 'ICVKCHM', 'ICVKCHN', 'ICVKCIM', 'ICVKCIN', 'ICVLAGM', 'ICVLAGN', 'ICVLAHM', 'ICVLAHN', 'ICVLAIM', 'ICVLAIN', 'ICVLBGM', 'ICVLBGN', 'ICVLBHM', 'ICVLBHN', 'ICVLBIM', 'ICVLBIN', 'ICVLCGM', 'ICVLCGN', 'ICVLCHM', 'ICVLCHN', 'ICVLCIM', 'ICVLCIN']
you may notice i am of the school 0->'O', 1->'1'. If that does not please you, change your literal to taste.
Mathematica, 87 characters-
Bonus Track below in version 3 (Generating Valid English Words)
This version includes the Q, hyphen, and space rules, as currently listed.
#<>""&/#Tuples#Join[{{"-"},{" "}},"A"~CharacterRange~"Y"~Drop~{17}~Partition~3][[#+1]]&
Mathematica: 98 chars
k[x_]:=Tuples[Table[Union[{{"-"},{1}},
Partition[CharacterRange["A","Y"],3]][[(x+1)[[i]]]],{i,1,7}]]
Please note the loooong names
Usage
k[{4,2,8,5,2,4,6}]
Edit>
It outputs only unique cases.
To count the unique sequences:
Length[k[{4,2,8,5,2,4,6}]]
Edit
Version 2: 96 Chars
k[x_]:=Tuples[Table[Union[{{"-"},{1}},
Partition[CharacterRange["A","Y"],3]][[(x+1)[[i]]]],{i,1}]]
Version 3: a Bonus track - Generating Valid English Words
I decided that Mathematica is very powerful but too verbose for a shorthand competition. Anyway, before bowing and leaving the "contest" I want to show up one more function, just for amusement, and for checking whether the statement "Bonus points awarded for recognizing output as real English words. Okay, not really. ;-)" was true or not.
The code is:
d[x_] := Join ## (DictionaryLookup[# <> ""] & /#
Tuples#Join[{{"-"}, {" "}},
"a"~CharacterRange~"y"~Drop~{17}~Partition~3][[x + 1]])
When called with
d[{7, 2, 3, 4, 7, 8, 4, 2}]
The result is
{"sadistic"}
When called with
d[{2,6,8,2,4}]
The result is
{"botch", "couch"}
And when called with
d[{3, 2, 4, 5}]
The result is
{"fail"}
Nice, isn't it?
q, 52 39 chars
(cross/)(3 cut"--- ",.Q.A except"QZ")
q is evaluated left of right.
.Q.A contains the vector "ABC...XYZ"
except returns x excluding values in y
join "--- " to the modified char vector
cut into chunks of 3
cross returns all possible combinations, and is applied across all chunks
q)(cross/)(3 cut"--- ",.Q.A except"QZ")[4 2 8 5 2 4 6]
"GATJAGM"
"GATJAGN"
"GATJAGO"
"GATJAHM"
"GATJAHN"
"GATJAHO"
"GATJAIM"
"GATJAIN"
"GATJAIO"
....
J, 60 62 65 67 characters
~.('--- ','Q'(~:#])25{.65|.a.){~((7$3)#:i.3^7)+"1]3*"."0":
Uses Nick's Modified North American Classic Key Pad.
~.('--- ','Q'(~:#])25{.65|.a.){~((7$3)#:i.3^7)+"1]3*"."0":4285246
...
ICTJCHM
ICTJCHN
ICTJCHO
ICTJCIM
ICTJCIN
ICTJCIO
ICTKAGM
ICTKAGN
ICTKAGO
ICTKAHM
ICTKAHN
ICTKAHO
ICTKAIM
ICTKAIN
ICTKAIO
ICTKBGM
ICTKBGN
ICTKBGO
ICTKBHM
ICTKBHN
ICTKBHO
ICTKBIM
ICTKBIN
ICTKBIO
ICTKCGM
ICTKCGN
ICTKCGO
ICTKCHM
ICTKCHN
ICTKCHO
ICTKCIM
ICTKCIN
ICTKCIO
ICTLAGM
ICTLAGN
ICTLAGO
ICTLAHM
ICTLAHN
ICTLAHO
ICTLAIM
ICTLAIN
ICTLAIO
ICTLBGM
ICTLBGN
ICTLBGO
ICTLBHM
ICTLBHN
ICTLBHO
ICTLBIM
ICTLBIN
ICTLBIO
ICTLCGM
ICTLCGN
ICTLCGO
ICTLCHM
ICTLCHN
ICTLCHO
ICTLCIM
ICTLCIN
ICTLCIO
ICUJAGM
ICUJAGN
ICUJAGO
ICUJAHM
ICUJAHN
ICUJAHO
ICUJAIM
ICUJAIN
ICUJAIO
ICUJBGM
ICUJBGN
ICUJBGO
ICUJBHM
ICUJBHN
ICUJBHO
ICUJBIM
ICUJBIN
ICUJBIO
ICUJCGM
ICUJCGN
ICUJCGO
ICUJCHM
ICUJCHN
ICUJCHO
ICUJCIM
ICUJCIN
ICUJCIO
ICUKAGM
ICUKAGN
ICUKAGO
ICUKAHM
ICUKAHN
ICUKAHO
ICUKAIM
ICUKAIN
ICUKAIO
ICUKBGM
ICUKBGN
ICUKBGO
ICUKBHM
ICUKBHN
ICUKBHO
ICUKBIM
ICUKBIN
ICUKBIO
ICUKCGM
ICUKCGN
ICUKCGO
ICUKCHM
ICUKCHN
ICUKCHO
ICUKCIM
ICUKCIN
ICUKCIO
ICULAGM
ICULAGN
ICULAGO
ICULAHM
ICULAHN
ICULAHO
ICULAIM
ICULAIN
ICULAIO
ICULBGM
ICULBGN
ICULBGO
ICULBHM
ICULBHN
ICULBHO
ICULBIM
ICULBIN
ICULBIO
ICULCGM
ICULCGN
ICULCGO
ICULCHM
ICULCHN
ICULCHO
ICULCIM
ICULCIN
ICULCIO
ICVJAGM
ICVJAGN
ICVJAGO
ICVJAHM
ICVJAHN
ICVJAHO
ICVJAIM
ICVJAIN
ICVJAIO
ICVJBGM
ICVJBGN
ICVJBGO
ICVJBHM
ICVJBHN
ICVJBHO
ICVJBIM
ICVJBIN
ICVJBIO
ICVJCGM
ICVJCGN
ICVJCGO
ICVJCHM
ICVJCHN
ICVJCHO
ICVJCIM
ICVJCIN
ICVJCIO
ICVKAGM
ICVKAGN
ICVKAGO
ICVKAHM
ICVKAHN
ICVKAHO
ICVKAIM
ICVKAIN
ICVKAIO
ICVKBGM
ICVKBGN
ICVKBGO
ICVKBHM
ICVKBHN
ICVKBHO
ICVKBIM
ICVKBIN
ICVKBIO
ICVKCGM
ICVKCGN
ICVKCGO
ICVKCHM
ICVKCHN
ICVKCHO
ICVKCIM
ICVKCIN
ICVKCIO
ICVLAGM
ICVLAGN
ICVLAGO
ICVLAHM
ICVLAHN
ICVLAHO
ICVLAIM
ICVLAIN
ICVLAIO
ICVLBGM
ICVLBGN
ICVLBGO
ICVLBHM
ICVLBHN
ICVLBHO
ICVLBIM
ICVLBIN
ICVLBIO
ICVLCGM
ICVLCGN
ICVLCGO
ICVLCHM
ICVLCHN
ICVLCHO
ICVLCIM
ICVLCIN
ICVLCIO
Haskell:
Just a pure function (69 78 chars)::
f=mapM(\x->("-":" ":words"ABC DEF GHI JKL MNO PRS TUV WXY")!!read[x])
Usage:
Prelude> f "626"
["MAM","MAN","MAO","MBM","MBN","MBO","MCM","MCN","MCO","NAM","NAN","NAO","NBM","NBN","NBO","NCM","NCN","NCO","OAM","OAN","OAO","OBM","OBN","OBO","OCM","OCN","OCO"]
As a full program (93 102 chars)::
main=getLine>>=mapM print.mapM(\x->("-":" ":words"ABC DEF GHI JKL MNO PRS TUV WXY")!!read[x])
Usage:
~$ ./a.out
626
"MAM"
"MAN"
"MAO"
"MBM"
"MBN"
"MBO"
"MCM"
"MCN"
"MCO"
"NAM"
"NAN"
"NAO"
"NBM"
"NBN"
"NBO"
"NCM"
"NCN"
"NCO"
"OAM"
"OAN"
"OAO"
"OBM"
"OBN"
"OBO"
"OCM"
"OCN"
"OCO"
Replace [...,"PRS","TUV","WXY"] with [...,"PQRS","TUV","WXYZ"] to get the international keypad, +2 chars.
Replace print with putStrLn to strip the quotation marks in output, +3 chars.
Newlines and whitespaces between symbol and words are added only to remove the horizontal scrollbar.
Perl, 101 chars:
This abuses the glob operator <{a,b,c}{d,e,f}> to calculate the cartesian product:
$,=$/;print eval"<{".(join"}{",map{s/\B/,/g;$_} # wrapped to fit
map{(0,1,join("",A..Z)=~/...S?Z?/g)[$_]}pop=~/./g)."}>"
as a program (111 chars):
perl -e'$,=$/;print eval"<{".(join"}{",map{s/\B/,/g;$_}map{(0,1,join("",A..Z)=~/...S?Z?/g)[$_]}pop=~/./g)."}>"' 4285246
Edit: incorporated mobrule's suggestions
Python, 157 139 119 chars:
Tabs and newlines counted... ;)
Now using "Nick's Modified Keypad"
def p(a,b=''):
if a:[p(a[1:],b+c)for c in '-, ,ABC,DEF,GHI,JKL,MNO,PRS,TUV,WXY'.split(',')[int(a[0])]];return
print b
Usage: (+12c)
p('4285246')
Ruby, 109 characters
l=%w{- \ ABC DEF GHI JKL MN PRS TUV WXY};p$_.chars.map{|d|[*l[d.to_i].chars]}.reduce(&:product).map{|x|x*""}
Usage:
echo "2345678" | ruby -lne 'l=%w{- \ ABC DEF GHI JKL MN PRS TUV WXY};p$_.chars.map{|d|[*l[d.to_i].chars]}.reduce(&:product).map{|x|x*""}'
Result for "2345678" - length 1458
ADGJMPT
ADGJMPU
ADGJMPV
ADGJMRT
ADGJMRU
ADGJMRV
ADGJMST
ADGJMSU
ADGJMSV
ADGJNPT
ADGJNPU
ADGJNPV
ADGJNRT
ADGJNRU
ADGJNRV
ADGJNST
ADGJNSU
ADGJNSV
ADGKMPT
ADGKMPU
ADGKMPV
ADGKMRT
ADGKMRU
ADGKMRV
ADGKMST
ADGKMSU
ADGKMSV
ADGKNPT
ADGKNPU
ADGKNPV
ADGKNRT
ADGKNRU
ADGKNRV
ADGKNST
ADGKNSU
ADGKNSV
ADGLMPT
ADGLMPU
ADGLMPV
ADGLMRT
ADGLMRU
ADGLMRV
ADGLMST
ADGLMSU
ADGLMSV
ADGLNPT
ADGLNPU
ADGLNPV
ADGLNRT
ADGLNRU
ADGLNRV
ADGLNST
ADGLNSU
ADGLNSV
ADHJMPT
ADHJMPU
ADHJMPV
ADHJMRT
ADHJMRU
ADHJMRV
ADHJMST
ADHJMSU
ADHJMSV
ADHJNPT
ADHJNPU
ADHJNPV
ADHJNRT
ADHJNRU
ADHJNRV
ADHJNST
ADHJNSU
ADHJNSV
ADHKMPT
ADHKMPU
ADHKMPV
ADHKMRT
ADHKMRU
ADHKMRV
ADHKMST
ADHKMSU
ADHKMSV
ADHKNPT
ADHKNPU
ADHKNPV
ADHKNRT
ADHKNRU
ADHKNRV
ADHKNST
ADHKNSU
ADHKNSV
ADHLMPT
ADHLMPU
ADHLMPV
ADHLMRT
ADHLMRU
ADHLMRV
ADHLMST
ADHLMSU
ADHLMSV
ADHLNPT
ADHLNPU
ADHLNPV
ADHLNRT
ADHLNRU
ADHLNRV
ADHLNST
ADHLNSU
ADHLNSV
ADIJMPT
ADIJMPU
ADIJMPV
ADIJMRT
ADIJMRU
ADIJMRV
ADIJMST
ADIJMSU
ADIJMSV
ADIJNPT
ADIJNPU
ADIJNPV
ADIJNRT
ADIJNRU
ADIJNRV
ADIJNST
ADIJNSU
ADIJNSV
ADIKMPT
ADIKMPU
ADIKMPV
ADIKMRT
ADIKMRU
ADIKMRV
ADIKMST
ADIKMSU
ADIKMSV
ADIKNPT
ADIKNPU
ADIKNPV
ADIKNRT
ADIKNRU
ADIKNRV
ADIKNST
ADIKNSU
ADIKNSV
ADILMPT
ADILMPU
ADILMPV
ADILMRT
ADILMRU
ADILMRV
ADILMST
ADILMSU
ADILMSV
ADILNPT
ADILNPU
ADILNPV
ADILNRT
ADILNRU
ADILNRV
ADILNST
ADILNSU
ADILNSV
AEGJMPT
AEGJMPU
AEGJMPV
AEGJMRT
AEGJMRU
AEGJMRV
AEGJMST
AEGJMSU
AEGJMSV
AEGJNPT
AEGJNPU
AEGJNPV
AEGJNRT
AEGJNRU
AEGJNRV
AEGJNST
AEGJNSU
AEGJNSV
AEGKMPT
AEGKMPU
AEGKMPV
AEGKMRT
AEGKMRU
AEGKMRV
AEGKMST
AEGKMSU
AEGKMSV
AEGKNPT
AEGKNPU
AEGKNPV
AEGKNRT
AEGKNRU
AEGKNRV
AEGKNST
AEGKNSU
AEGKNSV
AEGLMPT
AEGLMPU
AEGLMPV
AEGLMRT
AEGLMRU
AEGLMRV
AEGLMST
AEGLMSU
AEGLMSV
AEGLNPT
AEGLNPU
AEGLNPV
AEGLNRT
AEGLNRU
AEGLNRV
AEGLNST
AEGLNSU
AEGLNSV
AEHJMPT
AEHJMPU
AEHJMPV
AEHJMRT
AEHJMRU
AEHJMRV
AEHJMST
AEHJMSU
AEHJMSV
AEHJNPT
AEHJNPU
AEHJNPV
AEHJNRT
AEHJNRU
AEHJNRV
AEHJNST
AEHJNSU
AEHJNSV
AEHKMPT
AEHKMPU
AEHKMPV
AEHKMRT
AEHKMRU
AEHKMRV
AEHKMST
AEHKMSU
AEHKMSV
AEHKNPT
AEHKNPU
AEHKNPV
AEHKNRT
AEHKNRU
AEHKNRV
AEHKNST
AEHKNSU
AEHKNSV
AEHLMPT
AEHLMPU
AEHLMPV
AEHLMRT
AEHLMRU
AEHLMRV
AEHLMST
AEHLMSU
AEHLMSV
AEHLNPT
AEHLNPU
AEHLNPV
AEHLNRT
AEHLNRU
AEHLNRV
AEHLNST
AEHLNSU
AEHLNSV
AEIJMPT
AEIJMPU
AEIJMPV
AEIJMRT
AEIJMRU
AEIJMRV
AEIJMST
AEIJMSU
AEIJMSV
AEIJNPT
AEIJNPU
AEIJNPV
AEIJNRT
AEIJNRU
AEIJNRV
AEIJNST
AEIJNSU
AEIJNSV
AEIKMPT
AEIKMPU
AEIKMPV
AEIKMRT
AEIKMRU
AEIKMRV
AEIKMST
AEIKMSU
AEIKMSV
AEIKNPT
AEIKNPU
AEIKNPV
AEIKNRT
AEIKNRU
AEIKNRV
AEIKNST
AEIKNSU
AEIKNSV
AEILMPT
AEILMPU
AEILMPV
AEILMRT
AEILMRU
AEILMRV
AEILMST
AEILMSU
AEILMSV
AEILNPT
AEILNPU
AEILNPV
AEILNRT
AEILNRU
AEILNRV
AEILNST
AEILNSU
AEILNSV
AFGJMPT
AFGJMPU
AFGJMPV
AFGJMRT
AFGJMRU
AFGJMRV
AFGJMST
AFGJMSU
AFGJMSV
AFGJNPT
AFGJNPU
AFGJNPV
AFGJNRT
AFGJNRU
AFGJNRV
AFGJNST
AFGJNSU
AFGJNSV
AFGKMPT
AFGKMPU
AFGKMPV
AFGKMRT
AFGKMRU
AFGKMRV
AFGKMST
AFGKMSU
AFGKMSV
AFGKNPT
AFGKNPU
AFGKNPV
AFGKNRT
AFGKNRU
AFGKNRV
AFGKNST
AFGKNSU
AFGKNSV
AFGLMPT
AFGLMPU
AFGLMPV
AFGLMRT
AFGLMRU
AFGLMRV
AFGLMST
AFGLMSU
AFGLMSV
AFGLNPT
AFGLNPU
AFGLNPV
AFGLNRT
AFGLNRU
AFGLNRV
AFGLNST
AFGLNSU
AFGLNSV
AFHJMPT
AFHJMPU
AFHJMPV
AFHJMRT
AFHJMRU
AFHJMRV
AFHJMST
AFHJMSU
AFHJMSV
AFHJNPT
AFHJNPU
AFHJNPV
AFHJNRT
AFHJNRU
AFHJNRV
AFHJNST
AFHJNSU
AFHJNSV
AFHKMPT
AFHKMPU
AFHKMPV
AFHKMRT
AFHKMRU
AFHKMRV
AFHKMST
AFHKMSU
AFHKMSV
AFHKNPT
AFHKNPU
AFHKNPV
AFHKNRT
AFHKNRU
AFHKNRV
AFHKNST
AFHKNSU
AFHKNSV
AFHLMPT
AFHLMPU
AFHLMPV
AFHLMRT
AFHLMRU
AFHLMRV
AFHLMST
AFHLMSU
AFHLMSV
AFHLNPT
AFHLNPU
AFHLNPV
AFHLNRT
AFHLNRU
AFHLNRV
AFHLNST
AFHLNSU
AFHLNSV
AFIJMPT
AFIJMPU
AFIJMPV
AFIJMRT
AFIJMRU
AFIJMRV
AFIJMST
AFIJMSU
AFIJMSV
AFIJNPT
AFIJNPU
AFIJNPV
AFIJNRT
AFIJNRU
AFIJNRV
AFIJNST
AFIJNSU
AFIJNSV
AFIKMPT
AFIKMPU
AFIKMPV
AFIKMRT
AFIKMRU
AFIKMRV
AFIKMST
AFIKMSU
AFIKMSV
AFIKNPT
AFIKNPU
AFIKNPV
AFIKNRT
AFIKNRU
AFIKNRV
AFIKNST
AFIKNSU
AFIKNSV
AFILMPT
AFILMPU
AFILMPV
AFILMRT
AFILMRU
AFILMRV
AFILMST
AFILMSU
AFILMSV
AFILNPT
AFILNPU
AFILNPV
AFILNRT
AFILNRU
AFILNRV
AFILNST
AFILNSU
AFILNSV
BDGJMPT
BDGJMPU
BDGJMPV
BDGJMRT
BDGJMRU
BDGJMRV
BDGJMST
BDGJMSU
BDGJMSV
BDGJNPT
BDGJNPU
BDGJNPV
BDGJNRT
BDGJNRU
BDGJNRV
BDGJNST
BDGJNSU
BDGJNSV
BDGKMPT
BDGKMPU
BDGKMPV
BDGKMRT
BDGKMRU
BDGKMRV
BDGKMST
BDGKMSU
BDGKMSV
BDGKNPT
BDGKNPU
BDGKNPV
BDGKNRT
BDGKNRU
BDGKNRV
BDGKNST
BDGKNSU
BDGKNSV
BDGLMPT
BDGLMPU
BDGLMPV
BDGLMRT
BDGLMRU
BDGLMRV
BDGLMST
BDGLMSU
BDGLMSV
BDGLNPT
BDGLNPU
BDGLNPV
BDGLNRT
BDGLNRU
BDGLNRV
BDGLNST
BDGLNSU
BDGLNSV
BDHJMPT
BDHJMPU
BDHJMPV
BDHJMRT
BDHJMRU
BDHJMRV
BDHJMST
BDHJMSU
BDHJMSV
BDHJNPT
BDHJNPU
BDHJNPV
BDHJNRT
BDHJNRU
BDHJNRV
BDHJNST
BDHJNSU
BDHJNSV
BDHKMPT
BDHKMPU
BDHKMPV
BDHKMRT
BDHKMRU
BDHKMRV
BDHKMST
BDHKMSU
BDHKMSV
BDHKNPT
BDHKNPU
BDHKNPV
BDHKNRT
BDHKNRU
BDHKNRV
BDHKNST
BDHKNSU
BDHKNSV
BDHLMPT
BDHLMPU
BDHLMPV
BDHLMRT
BDHLMRU
BDHLMRV
BDHLMST
BDHLMSU
BDHLMSV
BDHLNPT
BDHLNPU
BDHLNPV
BDHLNRT
BDHLNRU
BDHLNRV
BDHLNST
BDHLNSU
BDHLNSV
BDIJMPT
BDIJMPU
BDIJMPV
BDIJMRT
BDIJMRU
BDIJMRV
BDIJMST
BDIJMSU
BDIJMSV
BDIJNPT
BDIJNPU
BDIJNPV
BDIJNRT
BDIJNRU
BDIJNRV
BDIJNST
BDIJNSU
BDIJNSV
BDIKMPT
BDIKMPU
BDIKMPV
BDIKMRT
BDIKMRU
BDIKMRV
BDIKMST
BDIKMSU
BDIKMSV
BDIKNPT
BDIKNPU
BDIKNPV
BDIKNRT
BDIKNRU
BDIKNRV
BDIKNST
BDIKNSU
BDIKNSV
BDILMPT
BDILMPU
BDILMPV
BDILMRT
BDILMRU
BDILMRV
BDILMST
BDILMSU
BDILMSV
BDILNPT
BDILNPU
BDILNPV
BDILNRT
BDILNRU
BDILNRV
BDILNST
BDILNSU
BDILNSV
BEGJMPT
BEGJMPU
BEGJMPV
BEGJMRT
BEGJMRU
BEGJMRV
BEGJMST
BEGJMSU
BEGJMSV
BEGJNPT
BEGJNPU
BEGJNPV
BEGJNRT
BEGJNRU
BEGJNRV
BEGJNST
BEGJNSU
BEGJNSV
BEGKMPT
BEGKMPU
BEGKMPV
BEGKMRT
BEGKMRU
BEGKMRV
BEGKMST
BEGKMSU
BEGKMSV
BEGKNPT
BEGKNPU
BEGKNPV
BEGKNRT
BEGKNRU
BEGKNRV
BEGKNST
BEGKNSU
BEGKNSV
BEGLMPT
BEGLMPU
BEGLMPV
BEGLMRT
BEGLMRU
BEGLMRV
BEGLMST
BEGLMSU
BEGLMSV
BEGLNPT
BEGLNPU
BEGLNPV
BEGLNRT
BEGLNRU
BEGLNRV
BEGLNST
BEGLNSU
BEGLNSV
BEHJMPT
BEHJMPU
BEHJMPV
BEHJMRT
BEHJMRU
BEHJMRV
BEHJMST
BEHJMSU
BEHJMSV
BEHJNPT
BEHJNPU
BEHJNPV
BEHJNRT
BEHJNRU
BEHJNRV
BEHJNST
BEHJNSU
BEHJNSV
BEHKMPT
BEHKMPU
BEHKMPV
BEHKMRT
BEHKMRU
BEHKMRV
BEHKMST
BEHKMSU
BEHKMSV
BEHKNPT
BEHKNPU
BEHKNPV
BEHKNRT
BEHKNRU
BEHKNRV
BEHKNST
BEHKNSU
BEHKNSV
BEHLMPT
BEHLMPU
BEHLMPV
BEHLMRT
BEHLMRU
BEHLMRV
BEHLMST
BEHLMSU
BEHLMSV
BEHLNPT
BEHLNPU
BEHLNPV
BEHLNRT
BEHLNRU
BEHLNRV
BEHLNST
BEHLNSU
BEHLNSV
BEIJMPT
BEIJMPU
BEIJMPV
BEIJMRT
BEIJMRU
BEIJMRV
BEIJMST
BEIJMSU
BEIJMSV
BEIJNPT
BEIJNPU
BEIJNPV
BEIJNRT
BEIJNRU
BEIJNRV
BEIJNST
BEIJNSU
BEIJNSV
BEIKMPT
BEIKMPU
BEIKMPV
BEIKMRT
BEIKMRU
BEIKMRV
BEIKMST
BEIKMSU
BEIKMSV
BEIKNPT
BEIKNPU
BEIKNPV
BEIKNRT
BEIKNRU
BEIKNRV
BEIKNST
BEIKNSU
BEIKNSV
BEILMPT
BEILMPU
BEILMPV
BEILMRT
BEILMRU
BEILMRV
BEILMST
BEILMSU
BEILMSV
BEILNPT
BEILNPU
BEILNPV
BEILNRT
BEILNRU
BEILNRV
BEILNST
BEILNSU
BEILNSV
BFGJMPT
BFGJMPU
BFGJMPV
BFGJMRT
BFGJMRU
BFGJMRV
BFGJMST
BFGJMSU
BFGJMSV
BFGJNPT
BFGJNPU
BFGJNPV
BFGJNRT
BFGJNRU
BFGJNRV
BFGJNST
BFGJNSU
BFGJNSV
BFGKMPT
BFGKMPU
BFGKMPV
BFGKMRT
BFGKMRU
BFGKMRV
BFGKMST
BFGKMSU
BFGKMSV
BFGKNPT
BFGKNPU
BFGKNPV
BFGKNRT
BFGKNRU
BFGKNRV
BFGKNST
BFGKNSU
BFGKNSV
BFGLMPT
BFGLMPU
BFGLMPV
BFGLMRT
BFGLMRU
BFGLMRV
BFGLMST
BFGLMSU
BFGLMSV
BFGLNPT
BFGLNPU
BFGLNPV
BFGLNRT
BFGLNRU
BFGLNRV
BFGLNST
BFGLNSU
BFGLNSV
BFHJMPT
BFHJMPU
BFHJMPV
BFHJMRT
BFHJMRU
BFHJMRV
BFHJMST
BFHJMSU
BFHJMSV
BFHJNPT
BFHJNPU
BFHJNPV
BFHJNRT
BFHJNRU
BFHJNRV
BFHJNST
BFHJNSU
BFHJNSV
BFHKMPT
BFHKMPU
BFHKMPV
BFHKMRT
BFHKMRU
BFHKMRV
BFHKMST
BFHKMSU
BFHKMSV
BFHKNPT
BFHKNPU
BFHKNPV
BFHKNRT
BFHKNRU
BFHKNRV
BFHKNST
BFHKNSU
BFHKNSV
BFHLMPT
BFHLMPU
BFHLMPV
BFHLMRT
BFHLMRU
BFHLMRV
BFHLMST
BFHLMSU
BFHLMSV
BFHLNPT
BFHLNPU
BFHLNPV
BFHLNRT
BFHLNRU
BFHLNRV
BFHLNST
BFHLNSU
BFHLNSV
BFIJMPT
BFIJMPU
BFIJMPV
BFIJMRT
BFIJMRU
BFIJMRV
BFIJMST
BFIJMSU
BFIJMSV
BFIJNPT
BFIJNPU
BFIJNPV
BFIJNRT
BFIJNRU
BFIJNRV
BFIJNST
BFIJNSU
BFIJNSV
BFIKMPT
BFIKMPU
BFIKMPV
BFIKMRT
BFIKMRU
BFIKMRV
BFIKMST
BFIKMSU
BFIKMSV
BFIKNPT
BFIKNPU
BFIKNPV
BFIKNRT
BFIKNRU
BFIKNRV
BFIKNST
BFIKNSU
BFIKNSV
BFILMPT
BFILMPU
BFILMPV
BFILMRT
BFILMRU
BFILMRV
BFILMST
BFILMSU
BFILMSV
BFILNPT
BFILNPU
BFILNPV
BFILNRT
BFILNRU
BFILNRV
BFILNST
BFILNSU
BFILNSV
CDGJMPT
CDGJMPU
CDGJMPV
CDGJMRT
CDGJMRU
CDGJMRV
CDGJMST
CDGJMSU
CDGJMSV
CDGJNPT
CDGJNPU
CDGJNPV
CDGJNRT
CDGJNRU
CDGJNRV
CDGJNST
CDGJNSU
CDGJNSV
CDGKMPT
CDGKMPU
CDGKMPV
CDGKMRT
CDGKMRU
CDGKMRV
CDGKMST
CDGKMSU
CDGKMSV
CDGKNPT
CDGKNPU
CDGKNPV
CDGKNRT
CDGKNRU
CDGKNRV
CDGKNST
CDGKNSU
CDGKNSV
CDGLMPT
CDGLMPU
CDGLMPV
CDGLMRT
CDGLMRU
CDGLMRV
CDGLMST
CDGLMSU
CDGLMSV
CDGLNPT
CDGLNPU
CDGLNPV
CDGLNRT
CDGLNRU
CDGLNRV
CDGLNST
CDGLNSU
CDGLNSV
CDHJMPT
CDHJMPU
CDHJMPV
CDHJMRT
CDHJMRU
CDHJMRV
CDHJMST
CDHJMSU
CDHJMSV
CDHJNPT
CDHJNPU
CDHJNPV
CDHJNRT
CDHJNRU
CDHJNRV
CDHJNST
CDHJNSU
CDHJNSV
CDHKMPT
CDHKMPU
CDHKMPV
CDHKMRT
CDHKMRU
CDHKMRV
CDHKMST
CDHKMSU
CDHKMSV
CDHKNPT
CDHKNPU
CDHKNPV
CDHKNRT
CDHKNRU
CDHKNRV
CDHKNST
CDHKNSU
CDHKNSV
CDHLMPT
CDHLMPU
CDHLMPV
CDHLMRT
CDHLMRU
CDHLMRV
CDHLMST
CDHLMSU
CDHLMSV
CDHLNPT
CDHLNPU
CDHLNPV
CDHLNRT
CDHLNRU
CDHLNRV
CDHLNST
CDHLNSU
CDHLNSV
CDIJMPT
CDIJMPU
CDIJMPV
CDIJMRT
CDIJMRU
CDIJMRV
CDIJMST
CDIJMSU
CDIJMSV
CDIJNPT
CDIJNPU
CDIJNPV
CDIJNRT
CDIJNRU
CDIJNRV
CDIJNST
CDIJNSU
CDIJNSV
CDIKMPT
CDIKMPU
CDIKMPV
CDIKMRT
CDIKMRU
CDIKMRV
CDIKMST
CDIKMSU
CDIKMSV
CDIKNPT
CDIKNPU
CDIKNPV
CDIKNRT
CDIKNRU
CDIKNRV
CDIKNST
CDIKNSU
CDIKNSV
CDILMPT
CDILMPU
CDILMPV
CDILMRT
CDILMRU
CDILMRV
CDILMST
CDILMSU
CDILMSV
CDILNPT
CDILNPU
CDILNPV
CDILNRT
CDILNRU
CDILNRV
CDILNST
CDILNSU
CDILNSV
CEGJMPT
CEGJMPU
CEGJMPV
CEGJMRT
CEGJMRU
CEGJMRV
CEGJMST
CEGJMSU
CEGJMSV
CEGJNPT
CEGJNPU
CEGJNPV
CEGJNRT
CEGJNRU
CEGJNRV
CEGJNST
CEGJNSU
CEGJNSV
CEGKMPT
CEGKMPU
CEGKMPV
CEGKMRT
CEGKMRU
CEGKMRV
CEGKMST
CEGKMSU
CEGKMSV
CEGKNPT
CEGKNPU
CEGKNPV
CEGKNRT
CEGKNRU
CEGKNRV
CEGKNST
CEGKNSU
CEGKNSV
CEGLMPT
CEGLMPU
CEGLMPV
CEGLMRT
CEGLMRU
CEGLMRV
CEGLMST
CEGLMSU
CEGLMSV
CEGLNPT
CEGLNPU
CEGLNPV
CEGLNRT
CEGLNRU
CEGLNRV
CEGLNST
CEGLNSU
CEGLNSV
CEHJMPT
CEHJMPU
CEHJMPV
CEHJMRT
CEHJMRU
CEHJMRV
CEHJMST
CEHJMSU
CEHJMSV
CEHJNPT
CEHJNPU
CEHJNPV
CEHJNRT
CEHJNRU
CEHJNRV
CEHJNST
CEHJNSU
CEHJNSV
CEHKMPT
CEHKMPU
CEHKMPV
CEHKMRT
CEHKMRU
CEHKMRV
CEHKMST
CEHKMSU
CEHKMSV
CEHKNPT
CEHKNPU
CEHKNPV
CEHKNRT
CEHKNRU
CEHKNRV
CEHKNST
CEHKNSU
CEHKNSV
CEHLMPT
CEHLMPU
CEHLMPV
CEHLMRT
CEHLMRU
CEHLMRV
CEHLMST
CEHLMSU
CEHLMSV
CEHLNPT
CEHLNPU
CEHLNPV
CEHLNRT
CEHLNRU
CEHLNRV
CEHLNST
CEHLNSU
CEHLNSV
CEIJMPT
CEIJMPU
CEIJMPV
CEIJMRT
CEIJMRU
CEIJMRV
CEIJMST
CEIJMSU
CEIJMSV
CEIJNPT
CEIJNPU
CEIJNPV
CEIJNRT
CEIJNRU
CEIJNRV
CEIJNST
CEIJNSU
CEIJNSV
CEIKMPT
CEIKMPU
CEIKMPV
CEIKMRT
CEIKMRU
CEIKMRV
CEIKMST
CEIKMSU
CEIKMSV
CEIKNPT
CEIKNPU
CEIKNPV
CEIKNRT
CEIKNRU
CEIKNRV
CEIKNST
CEIKNSU
CEIKNSV
CEILMPT
CEILMPU
CEILMPV
CEILMRT
CEILMRU
CEILMRV
CEILMST
CEILMSU
CEILMSV
CEILNPT
CEILNPU
CEILNPV
CEILNRT
CEILNRU
CEILNRV
CEILNST
CEILNSU
CEILNSV
CFGJMPT
CFGJMPU
CFGJMPV
CFGJMRT
CFGJMRU
CFGJMRV
CFGJMST
CFGJMSU
CFGJMSV
CFGJNPT
CFGJNPU
CFGJNPV
CFGJNRT
CFGJNRU
CFGJNRV
CFGJNST
CFGJNSU
CFGJNSV
CFGKMPT
CFGKMPU
CFGKMPV
CFGKMRT
CFGKMRU
CFGKMRV
CFGKMST
CFGKMSU
CFGKMSV
CFGKNPT
CFGKNPU
CFGKNPV
CFGKNRT
CFGKNRU
CFGKNRV
CFGKNST
CFGKNSU
CFGKNSV
CFGLMPT
CFGLMPU
CFGLMPV
CFGLMRT
CFGLMRU
CFGLMRV
CFGLMST
CFGLMSU
CFGLMSV
CFGLNPT
CFGLNPU
CFGLNPV
CFGLNRT
CFGLNRU
CFGLNRV
CFGLNST
CFGLNSU
CFGLNSV
CFHJMPT
CFHJMPU
CFHJMPV
CFHJMRT
CFHJMRU
CFHJMRV
CFHJMST
CFHJMSU
CFHJMSV
CFHJNPT
CFHJNPU
CFHJNPV
CFHJNRT
CFHJNRU
CFHJNRV
CFHJNST
CFHJNSU
CFHJNSV
CFHKMPT
CFHKMPU
CFHKMPV
CFHKMRT
CFHKMRU
CFHKMRV
CFHKMST
CFHKMSU
CFHKMSV
CFHKNPT
CFHKNPU
CFHKNPV
CFHKNRT
CFHKNRU
CFHKNRV
CFHKNST
CFHKNSU
CFHKNSV
CFHLMPT
CFHLMPU
CFHLMPV
CFHLMRT
CFHLMRU
CFHLMRV
CFHLMST
CFHLMSU
CFHLMSV
CFHLNPT
CFHLNPU
CFHLNPV
CFHLNRT
CFHLNRU
CFHLNRV
CFHLNST
CFHLNSU
CFHLNSV
CFIJMPT
CFIJMPU
CFIJMPV
CFIJMRT
CFIJMRU
CFIJMRV
CFIJMST
CFIJMSU
CFIJMSV
CFIJNPT
CFIJNPU
CFIJNPV
CFIJNRT
CFIJNRU
CFIJNRV
CFIJNST
CFIJNSU
CFIJNSV
CFIKMPT
CFIKMPU
CFIKMPV
CFIKMRT
CFIKMRU
CFIKMRV
CFIKMST
CFIKMSU
CFIKMSV
CFIKNPT
CFIKNPU
CFIKNPV
CFIKNRT
CFIKNRU
CFIKNRV
CFIKNST
CFIKNSU
CFIKNSV
CFILMPT
CFILMPU
CFILMPV
CFILMRT
CFILMRU
CFILMRV
CFILMST
CFILMSU
CFILMSV
CFILNPT
CFILNPU
CFILNPV
CFILNRT
CFILNRU
CFILNRV
CFILNST
CFILNSU
CFILNSV
Python 243 chars
pad = [" ","-","ABC","DEF","GHI","JKL","MN","PRS","TUV","WXY"]
def c(p,v):
try:
if 1>len(v):print p;return
map(lambda a:c(p+a,v[1:]),pad[int(v[0])])
except:
p(p+"-",v[1:])
c("","4285246")

Tagging translated text correctly (tagging with lang="")

A client has asked me to add some polish text to their website, not having much experience in this area, can anyone tell me which of the two 'lang' solutions below is correct (or offer an alternative):-
Tag everything:-
<div lang="pl">
<h2 lang="pl">Najlepszy ruch jaki zrobisz!</h2>
<p lang="pl">Do przyszłych najemców:</p>
<p lang="pl">Tutaj w SPS mamy bogate doświadczenie na rynku najmu i wyszukiwaniu domu, który będzie idealnym miejscem dla przyszłych lokatorów. Dla wielu może to być trudne i stresujące, dlatego my w SPS pomożemy Wam przejść przez pole minowe związane z najmem i uczynić ten proces najprostszym i najszybszym jak to możliwe.</p>
<p lang="pl">Jeśli szukasz nieruchomości obecnie lub w najbliższej przyszłości prosimy o kontakt z naszym doświadczonym , przyjaznym i pomocnym personelem, a my postaramy się pomóc znaleźć Ci idealne miejsce, które jest właśnie dla Ciebie.</p>
<p lang="pl">Więc aby w łatwy sposób wynająć zadzwoń już dziś.</p>
</div>
Just tag the div
<div lang="pl">
<h2>Najlepszy ruch jaki zrobisz!</h2>
<p>Do przyszłych najemców:</p>
<p>Tutaj w SPS mamy bogate doświadczenie na rynku najmu i wyszukiwaniu domu, który będzie idealnym miejscem dla przyszłych lokatorów. Dla wielu może to być trudne i stresujące, dlatego my w SPS pomożemy Wam przejść przez pole minowe związane z najmem i uczynić ten proces najprostszym i najszybszym jak to możliwe.</p>
<p>Jeśli szukasz nieruchomości obecnie lub w najbliższej przyszłości prosimy o kontakt z naszym doświadczonym , przyjaznym i pomocnym personelem, a my postaramy się pomóc znaleźć Ci idealne miejsce, które jest właśnie dla Ciebie.</p>
<p>Więc aby w łatwy sposób wynająć zadzwoń już dziś.</p>
</div>
The latter. You only need to indicate changes in language.
Otherwise you would end up with:
<html lang="en-us">
<head lang="en-us">
<title lang="en-us"> A document written in American English </title>
…