#!/usr/bin/perl
use strict;
use warnings;
no warnings
qw(uninitialized
);
our %TM=(
I => [[0,4]],
L => [[0,3],[0,1]],
O => [[0,2],[0,2]],
S => [[0,1],[0,2],[1,1]],
T => [[1,1],[0,2],[1,1]]
);
sub solve {
my ($ans,%h)=0;
while ( $input=~/(\d+)(.)/g ) {
my ($off,$t)=($1,$TM{$2});
my $base=max
map { $h{$off+$_}-$t->[$_][0] } 0..@$t-1; $ans=max $ans,$h{$off+$_}=$base+$t->[$_][0]+$t->[$_][1] for 0..@$t-1;
}
$ans;
}
sub test {
my ($n,$input,$expected)=@_;
my $actual=solve($input);
say "$n: ",$actual eq $expected ? "ok":"ng ( $actual against $expected for $input )";
}
test(0, "1O3L0I0T", "5");
test(1, "0I", "4");
test(2, "0I0I", "8");
test(3, "0I1I2I3I4I", "4");
test(4, "0S0I", "5");
test(5, "0I0S", "6");
test(6, "2S0T2O3I", "8");
test(7, "4O4T1T0S4L1L3L", "10");
test(8, "0S2S4S6S8S10S12S14S", "16");
test(9, "14S12S10S8S6S4S2S0S", "2");
test(10, "5I2O10I0O4L10T9T11L8I2I10I12O7L12T12T12S11T9O10O13I12O10O7I9I7O0S1O2S0L1L", "23");
test(11, "9T14L10L8T4I1T3S5I8T12O3S7L9O7L14T2I7O3S6S2L0L13T10O4I9T7L8S0I12O9S11L11T14T", "27");
test(12, "9S9S7O11O16I2T9O12L10T9O0O13I9O1I2T14S7O9S11T5L7I14T13O0T12I3S10L10O7I15I6S2L12S8I16I3L", "23");
test(13, "11T13I16S15T7O10L12S1I5I8S5I13I15O8S9I1T12I1S5S0L14I12L16T2S2S8L2S14L16O4I13L15L13S11S9T13S9S3L6O", "22");
test(14, "12L10S7I5L14T12S9L1T14I0I5L1T2O18T9L0I15I16L10S1O15I0L17O5L18T4I18L7L7I13I3I12I2S3T5T3S16L14S14O11O15T14S", "17");
test(15, "0S18S2S19I14T7L14L2L6I9I0L4I5L13L15I8S8T2I5I7O18T3S1T7I2L8O0S20T9I14T5L5I1T4L9O8T19T5S12O16T19L4O10O10T14L", "24");
test(16, "7T5L6S4S8T6S10I19O20L14I18L21S7I11S11O1L13T20O9I7L2T8L2S20L3O14L9T17I8L8S14I6T2O11T21O18O6T15T1S3L6O19S18O20S19O16T6S14T", "26");
test(17, "18S2I4S16L13S17I21O8I17T8I14O12T20I20S19S16S13T12T20I22I15O2I2I8I2S18I9I9T6O13O13L17I2L20L2L4I9I19O11T3S10O2S18T12I5O11S19O21S6I17T17S", "26");
test(18, "11L5S0T22S18O13T2O22S15I12I21T16I3I1I22L11L11L22O13S24S15L13T15S19L10O15T7S24T19L0T13O11I12T13S4I24L15O3S19O10L19O0S20L7O11L21I22S18T19T23O8I22S24L0S", "21");
test(19, "7L7I11T7S18O17L8S15L9I3O24S3O1O5O14L9T13S2O25S22T10T8L24S18S13T1O1L6I10I4S13O3S7L10T1T4L17S20I18O15S25S23S21I19T6O24S9L2O2O15L12L8L8O18I18L0T5O", "31");
test(20, "999I999I999I999I999I999I999I999I999I999I999I", "44");
IyEvdXNyL2Jpbi9wZXJsCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm5vIHdhcm5pbmdzIHF3KHVuaW5pdGlhbGl6ZWQpOwp1c2UgZmVhdHVyZSBxdyhzYXkpOwp1c2UgTGlzdDo6VXRpbCBxdyhtYXgpOwoKb3VyICVUTT0oCiAgSSA9PiBbWzAsNF1dLAogIEwgPT4gW1swLDNdLFswLDFdXSwKICBPID0+IFtbMCwyXSxbMCwyXV0sCiAgUyA9PiBbWzAsMV0sWzAsMl0sWzEsMV1dLAogIFQgPT4gW1sxLDFdLFswLDJdLFsxLDFdXQopOwoKc3ViIHNvbHZlIHsKICBteSAkaW5wdXQ9c2hpZnQ7CiAgbXkgKCRhbnMsJWgpPTA7CiAgd2hpbGUgKCAkaW5wdXQ9fi8oXGQrKSguKS9nICkgewogICAgbXkgKCRvZmYsJHQpPSgkMSwkVE17JDJ9KTsKICAgIG15ICRiYXNlPW1heCBtYXAgeyAkaHskb2ZmKyRffS0kdC0+WyRfXVswXSB9IDAuLkAkdC0xOwogICAgJGFucz1tYXggJGFucywkaHskb2ZmKyRffT0kYmFzZSskdC0+WyRfXVswXSskdC0+WyRfXVsxXSBmb3IgMC4uQCR0LTE7CiAgfQogICRhbnM7Cn0KCnN1YiB0ZXN0IHsKICBteSAoJG4sJGlucHV0LCRleHBlY3RlZCk9QF87CiAgbXkgJGFjdHVhbD1zb2x2ZSgkaW5wdXQpOwogIHNheSAiJG46ICIsJGFjdHVhbCBlcSAkZXhwZWN0ZWQgPyAib2siOiJuZyAoICRhY3R1YWwgYWdhaW5zdCAkZXhwZWN0ZWQgZm9yICRpbnB1dCApIjsKfQoKdGVzdCgwLCAiMU8zTDBJMFQiLCAiNSIpOwp0ZXN0KDEsICIwSSIsICI0Iik7CnRlc3QoMiwgIjBJMEkiLCAiOCIpOwp0ZXN0KDMsICIwSTFJMkkzSTRJIiwgIjQiKTsKdGVzdCg0LCAiMFMwSSIsICI1Iik7CnRlc3QoNSwgIjBJMFMiLCAiNiIpOwp0ZXN0KDYsICIyUzBUMk8zSSIsICI4Iik7CnRlc3QoNywgIjRPNFQxVDBTNEwxTDNMIiwgIjEwIik7CnRlc3QoOCwgIjBTMlM0UzZTOFMxMFMxMlMxNFMiLCAiMTYiKTsKdGVzdCg5LCAiMTRTMTJTMTBTOFM2UzRTMlMwUyIsICIyIik7CnRlc3QoMTAsICI1STJPMTBJME80TDEwVDlUMTFMOEkySTEwSTEyTzdMMTJUMTJUMTJTMTFUOU8xME8xM0kxMk8xME83STlJN08wUzFPMlMwTDFMIiwgIjIzIik7CnRlc3QoMTEsICI5VDE0TDEwTDhUNEkxVDNTNUk4VDEyTzNTN0w5TzdMMTRUMkk3TzNTNlMyTDBMMTNUMTBPNEk5VDdMOFMwSTEyTzlTMTFMMTFUMTRUIiwgIjI3Iik7CnRlc3QoMTIsICI5UzlTN08xMU8xNkkyVDlPMTJMMTBUOU8wTzEzSTlPMUkyVDE0UzdPOVMxMVQ1TDdJMTRUMTNPMFQxMkkzUzEwTDEwTzdJMTVJNlMyTDEyUzhJMTZJM0wiLCAiMjMiKTsKdGVzdCgxMywgIjExVDEzSTE2UzE1VDdPMTBMMTJTMUk1SThTNUkxM0kxNU84UzlJMVQxMkkxUzVTMEwxNEkxMkwxNlQyUzJTOEwyUzE0TDE2TzRJMTNMMTVMMTNTMTFTOVQxM1M5UzNMNk8iLCAiMjIiKTsKdGVzdCgxNCwgIjEyTDEwUzdJNUwxNFQxMlM5TDFUMTRJMEk1TDFUMk8xOFQ5TDBJMTVJMTZMMTBTMU8xNUkwTDE3TzVMMThUNEkxOEw3TDdJMTNJM0kxMkkyUzNUNVQzUzE2TDE0UzE0TzExTzE1VDE0UyIsICIxNyIpOwp0ZXN0KDE1LCAiMFMxOFMyUzE5STE0VDdMMTRMMkw2STlJMEw0STVMMTNMMTVJOFM4VDJJNUk3TzE4VDNTMVQ3STJMOE8wUzIwVDlJMTRUNUw1STFUNEw5TzhUMTlUNVMxMk8xNlQxOUw0TzEwTzEwVDE0TCIsICIyNCIpOwp0ZXN0KDE2LCAiN1Q1TDZTNFM4VDZTMTBJMTlPMjBMMTRJMThMMjFTN0kxMVMxMU8xTDEzVDIwTzlJN0wyVDhMMlMyMEwzTzE0TDlUMTdJOEw4UzE0STZUMk8xMVQyMU8xOE82VDE1VDFTM0w2TzE5UzE4TzIwUzE5TzE2VDZTMTRUIiwgIjI2Iik7CnRlc3QoMTcsICIxOFMySTRTMTZMMTNTMTdJMjFPOEkxN1Q4STE0TzEyVDIwSTIwUzE5UzE2UzEzVDEyVDIwSTIySTE1TzJJMkk4STJTMThJOUk5VDZPMTNPMTNMMTdJMkwyMEwyTDRJOUkxOU8xMVQzUzEwTzJTMThUMTJJNU8xMVMxOU8yMVM2STE3VDE3UyIsICIyNiIpOwp0ZXN0KDE4LCAiMTFMNVMwVDIyUzE4TzEzVDJPMjJTMTVJMTJJMjFUMTZJM0kxSTIyTDExTDExTDIyTzEzUzI0UzE1TDEzVDE1UzE5TDEwTzE1VDdTMjRUMTlMMFQxM08xMUkxMlQxM1M0STI0TDE1TzNTMTlPMTBMMTlPMFMyMEw3TzExTDIxSTIyUzE4VDE5VDIzTzhJMjJTMjRMMFMiLCAiMjEiKTsKdGVzdCgxOSwgIjdMN0kxMVQ3UzE4TzE3TDhTMTVMOUkzTzI0UzNPMU81TzE0TDlUMTNTMk8yNVMyMlQxMFQ4TDI0UzE4UzEzVDFPMUw2STEwSTRTMTNPM1M3TDEwVDFUNEwxN1MyMEkxOE8xNVMyNVMyM1MyMUkxOVQ2TzI0UzlMMk8yTzE1TDEyTDhMOE8xOEkxOEwwVDVPIiwgIjMxIik7CnRlc3QoMjAsICI5OTlJOTk5STk5OUk5OTlJOTk5STk5OUk5OTlJOTk5STk5OUk5OTlJOTk5SSIsICI0NCIpOw==