(郁闷的一题)[POJ][1945][Hungry Cows][搜索/打表/lz77压缩 + KMP]

  昨天晚上学校的热身赛,把这两天有些过于自信的我又重新打回了原形,不得不承认我还是菜鸟的事实。

  链接:http://202.120.106.94/onlinejudge/contestrank.php?contest_id=65

  整场比赛的四个小时我一直都在做第一题,而且是一道我在POJ上做过的题目。当时做这题就很暴力,结果在比赛的时候一直TLE,这个时候心态已经失衡了,一来这题硕强23分钟的时候就出了,感觉不会太难,二来这题我以前也过了,对这题还有些许印象。于是总有一种这题一定要过的感觉,就一直在这题上死磕。直到比赛结束。期间我尝试过打表,但是很多数据都是10+,再加上数字直接用","分隔,所以打表要20000*3个字节之多,自然是交不上去的;不过可惜我当时没有意识到这个表可以控制在20000字节,这个规模是可以交的,这一点我下面再说。

  赛后搜解题报告,在http://www.cppblog.com/varg-vikernes/archive/2010/02/18/108024.aspx这个blog上看到了此大牛用压缩算法把数据压缩打表,于是我决定第二天研究这个lz77算法。正是这个瞬间萌发的沙茶念头,浪费了我一天的时间。

  第二天一起来,就到处百度lz77压缩算法,看了一上午,对lz77算法有了比较详尽的了解,一些细节上如何实现也基本上有些想法了。吃完午饭,我开始实现代码;大概下午两点半的时候,有了一份比较丑陋的代码,基本功能已经实现了;然后提交POJ、EOJ也把题目都过了,不过一些细节上还很粗陋。接下来又花了大半个下午来优化代码,其中出现了一些问题,调试了大半天,最后在晚上七点多钟的时候才搞定。

  那个时候还很高兴,觉得自己能实现这个算法还挺牛的。结果lp来机房,说“这题打表可以交啊,OJ代码的限制是32K”,当时没反应过来,想数据有20000个,每个有两个字符,不是正好交不了吗。不过后来我发现其每个数据不超过18,于是便可以用字符‘A’到‘S’来表示就可以存下来了,于是以字符串的形式打了表,提交,AC了。哎~~不知道说什么好,这么简单的转化我怎么就这么晚才反应过来呢,归根结底,还是自己太菜啊。

  在这里把lz77压缩和解压的代码贴一下吧,毕竟弄了我一天的时间

View Code
   
     
// 解压打表
#include < cstdio >
#include
< cstdlib >
#include
< climits >
#include
< iostream >
#include
< algorithm >
#include
< cstring >
#include
< string >
#include
< queue >
#include
< map >
#include
< vector >
#include
< bitset >
#include
< cmath >
#include
< set >
#include
< utility >
using namespace std;

typedef unsigned
char uc;
extern uc tab[ 20011 ];
uc data[
20011 ];
int sw[ 300 ];
char mp[ 70 ] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ "
" abcdefghijklmnopqrstuvwxyz "
" 0123456789+/ " ;

int calc( int b, int & u) { // γ编码转换
int r = 0 ; -- u;
for (; b & ( 1 << u); -- u, ++ r);
u
-= r;
r
= 1 << r;
r
+= (b >> u) & (r - 1 );
return r;
}

void gao(uc * out , int & m, int & b, int & u) {
int off, len, t; u -= 9 ;
t
= b >> u;
if (t & 256 ) {
off
= t ^ 256 ;
len
= calc(b, u) + 1 ; // 补回减去的1
memcpy( out + m, out + max( 0 , m - 255 ) + off, len);
m
+= len;
}
else out [m ++ ] = t;
b
&= ( 1 << u) - 1 ;
}

int lz77_decode(uc * in , int n, uc * out ) {
int i, b = 0 , u = 0 , m = 0 ;
for (i = 0 ; i < 64 ; ++ i) sw[mp[i]] = i;
for (i = 0 ; i < n; ++ i) {
b
= (b << 6 ) | sw[ in [i]];
u
+= 6 ;
while (u >= 24 ) gao( out , m, b, u);
}
while (u >= 9 ) gao( out , m, b, u);
return m;
}

int main() {
int n = 4993 ;
lz77_decode(tab, n, data);
while (scanf( " %d " , & n) != EOF) {
printf(
" %d\n " , data[n]);
}
return 0 ;
}

uc tab[]
= { // 从tab.txt文件中拷贝出来的
" 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 "
};
View Code
   
     
// 压缩
#include < cstdio >
#include
< cstdlib >
#include
< climits >
#include
< iostream >
#include
< algorithm >
#include
< cstring >
#include
< string >
#include
< queue >
#include
< map >
#include
< vector >
#include
< bitset >
#include
< cmath >
#include
< set >
#include
< utility >
#include
< ctime >
using namespace std;

typedef unsigned
char uc;
const int maxlen = 300 ;
int fail[maxlen], gam[maxlen], w[maxlen], len;
uc tab[
20001 ], encode[ 20001 ];
char mp[ 70 ] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ "
" abcdefghijklmnopqrstuvwxyz "
" 0123456789+/ " ;

void makefail(uc * t, int lt) {
-- t;
for ( int i = 1 , j = 0 ; i <= lt; ++ i, ++ j) {
fail[i]
= j;
while (j > 0 && t[i] != t[j]) j = fail[j];
}
}

int kmp(uc * s, int ls, uc * t, int lt, int & len) {
int lp = len = 0 ; -- s; -- t;
for ( int i = 1 , j = 1 ; i <= ls; ++ i, ++ j) {
while (j > 0 && s[i] != t[j]) j = fail[j];
if (j > len) { len = j; lp = i - j; }
if (j == lt) return i - lt;
}
return lp;
}

int lz77_encode(uc * in , int n, uc * out ) { // 返回out字串的长度
int i, j, off, len, b = 0 , u = 0 , m = 0 ;
for (i = 1 , w[ 0 ] = j =- 1 ; i < 256 ; gam[i ++ ] = j) { // 生成γ编码
w[i] = w[i - 1 ];
if ( ! (i & (i - 1 )) ) {
j
= (j + 1 ) << 2 ;
w[i]
+= 2 ;
}
else j ++ ;
}
for (i = 0 ; i < n; ++ i) {
int la = min(i, 255 );
int lb = min(n - i, 255 );
makefail(
in + i, lb);
off
= kmp( in + i - la, la, in + i, lb, len);
if (len < 2 ) {
b
= (b << 9 ) | in [i];
u
+= 9 ;
}
else { // len从2开始记录
b = (b << 9 ) | ( 256 + off);
b
= (b << w[len - 1 ]) | gam[len - 1 ];
u
+= 9 + w[len - 1 ]; // 为节省空间len减去1来记
i += len - 1 ;
}
for (; u >= 6 ; u -= 6 ) {
out [m ++ ] = mp[b >> (u - 6 )];
b
&= ( 1 << (u - 6 )) - 1 ;
}
}
if (u) out [m ++ ] = mp[b << ( 6 - u)];
return m;
}


int main() {
freopen(
" D:\\out.txt " , " r " , stdin); // out.txt中存放了打出来的表
freopen( " D:\\tab.txt " , " w " , stdout);
int val;
len
= 0 ;
while (scanf( " %d " , & val) != EOF) {
tab[len
++ ] = val;
}
// for (int i = 0; i < 100; ++i) {
// printf("%d,", tab[i]);
// }
// printf("%d\n", len);
int m = lz77_encode(tab, len, encode);
for ( int i = 0 ; i < m; ++ i) {
if (i % 76 == 0 ) {
printf(
" \"\n\" " );
}
printf(
" %c " , encode[i]);
}
printf(
" \"%d\n " , m);
return 0 ;
}

然后就是很简单的一个打表方式,直接转化成字符

View Code
   
     
#include < cstdio >
#include
< cstdlib >
#include
< climits >
#include
< iostream >
#include
< algorithm >
#include
< cstring >
#include
< string >
#include
< queue >
#include
< map >
#include
< vector >
#include
< bitset >
#include
< cmath >
#include
< set >
#include
< utility >
#include
< ctime >
using namespace std;

extern char * t;

int main() {
int n;
while (scanf( " %d " , & n) != EOF) {
printf(
" %d\n " , t[n] - ' A ' );
}
return 0 ;
}

char * t = {
" AABCCDDEDEEFEFFFEFFGFGGGFGGGGHGGFGGHGHHHGHHHHHHHGHHHHIHIHIIIHIHHGHHIHIIIHIII "
" IIIIHIIIIIIJIJIJIIIIHIIIIJIJIJJJIJJJIJJJJJJJIJJJIJIIHIIJIJJJIJJJJJJJIJJJJJJK "
" JJJJJJJJIJJJJJJKJKJKJKKKJKKKJKKKJKJKJJJJIJJJJKJKJKKKJKKKJKKKKKKKJKKKKKKKJKKK "
" KKKKKKKKKKKKJKKKKKKKJKKKJKJJIJJKJKKKJKKLKLKKJKKLKLKKKKKKKKKKJKKKKKKLKKKLKLLL "
" KLKLKLKLKLKKKKKKJKKKKKKLKLKLKLLLKLLLKLLLKLLLLLLLKLLLLLLLKLLLLLLLKLLLKLLLKLKL "
" KKKKJKKKKLKLKLLLKLLLKLLLLLLLKLLLLLLLKLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLKLLLLLLL "
" LLLLLMLMLLLMLMLLLLLLLLLLKLLLLLLLLLLMLMLLKLLMLMLLKLLLKLKKJKKLKLLLKLLMLMLLKLLM "
" LMMLLMMMLMLLKLLMLMMMLLMMLMLMLLLMLMLLLMLLLLLLKLLLLLLMLLLMLMMMLMLMLMMMLMMMMMMM "
" LMMMLMMMLMMMLMMMLMMMLMLMLMLLLLLLKLLLLLLMLMLMLMMMLMMMLMMMLMMMMMMMLMMMMMMMLMMM "
" MMMMLMMMMMMMMMMMMMMMLMMMMMMMMMMMMMMMLMMMMMMMMMMMMMMMLMMMMMMMLMMMMMMMLMMMLMMM "
" LMLMLLLLKLLLLMLMLMMMLMMMLMMMMMMMLMMMMMMMLMMMMMMMMMMNMMMMLMMMMNMMMMMMMMMMLMMM "
" MMMMMMMMMMMNMMMNMNMMMNMMMMMMLMMMMMMNMMMNMNMMMNMNMNMMMMMMMMMMLMMMMMMMMMMNMNMN "
" MNMNMNMNMNNNMNNNMNMNMNNNMNNNMNMNMMMNMNMMMMMMMMMMLMMMMMMMMMMNMNMMMMMNMNNNMNNN "
" MNMMLMMNMNNNMNNNMNMMLMMNMNMMLMMMLMLLKLLMLMMMLMMNMNMMLMMNMNNNMNNNMNMMLMMNMNNN "
" MNNNNNMMMMNNNNNMMNNNMNMMLMMNMNNNMMNNNNNNMMMNNNNNMNNNMNNNMNMNMNNNMNNNMNMNMNNN "
" MNMMMNMMMMMMLMMMMMMNMMMNMNNNMNMNMNNNMNNNNNNNMNNNMNNNMNNNNNNNMNNNNNNNNNNNNNNN "
" MNNNNNNNMNNNNNNNMNNNNNNNMNNNNNNNMNNNNNNNMNNNMNNNMNNNMNMNMNMMMMMMLMMMMMMNMNMN "
" MNNNMNNNMNNNMNNNNNNNMNNNNNNNMNNNNNNNMNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNMNNNNNNN "
" NNNNNNNOMNNNNONONNNNNONONNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNONONNNNNNNNNNMNNN "
" NNNNNNNONONNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNMNNNNONNNONONONNMNNONNNNMNNNNONN "
" MNNNMNNNMNMNMMMMLMMMMNMNMNNNMNNNMNNONNNNMNNNNONNMNNONONNNONONNNNMNNNNONNNNNN "
" NNNNMNNNNNNONNNONNNNNNNONOONNNNONNNNMNNNNONONNOONONNNNNNNONNNNNNNNNNMNNNNNNN "
" NNNONNNONNNNNONONONONOOONONONNOONOOONONONNOONONNNONNNNNNMNNNNNNONNNONOONNONO "
" NOOONOONNONONOOONOOONOOONONONONONONNNNNNNNNNMNNNNNNNNNNONONONONONOOONOOONOOO "
" NOOONOOONOOONOOONOOOOOOONOOOOOOONOOONOOONOOOOOOONOOOOOOONOOONOOONONONOOONOOO "
" NONONNNONONNNNNNNNNNMNNNNNNNNNNONONNNONONOOONOOONONONNNONOOONOOOOOOONNOOOOOO "
" NOOONONNMNNONOOONOOOOOONNOOOOOOONOOONONNMNNONOOONOOONONNMNNONONNMNNNMNMMLMMN "
" MNNNMNNONONNMNNONOOONOOONONNMNNONOOONOOOOOONNOOOOOOONOOONONNMNNONOOONOOOOOOO "
" NNOOOOOOOOOONONONNNOOOOOOOOOOONNNOOOOOONNOOONONNMNNONOOONNOOOOOONNNOOOOOOOOO "
" OOOONONONOOOOOOOOOOONOOOOOOONOOOOOOONOOONOOONOOOOOOONOOOOOOONOOONOOONOOOOOOO "
" NOOONONONOOONONNNONNNNNNMNNNNNNONNNONOOONONONOOONOOOOPOONOOONOOONOOOOOOONOOO "
" OPOOOOOOOOOONOOOOOOONOOOOOOONOOOOOOOOOOOOOOONOOOOOOOOOOPOOOOOOOOOOOOOOOOOOOO "
" NOOOOOOOOOOOOOOONOOOOOOOOOOOOOOPNOOOOOOPOOOOOOOONOOOOOOOOOOOOOOONOOOOOOOOOOO "
" OOOONOOOOOOONOOOOOOONOOPOOOONOOONOOONOOONONONONNNNNNMNNNNNNONONONOOONOOONOOO "
" NOOOOOOONOOOOOOONOOOOOOONOOOOOOOOOOOOPOONOOPOOOPOOOOOOOONOOOOOOOOOOPOOOPNOOO "
" OOOOOOOOOOOOOOOOOOOOOOOOOOOONOOOOOOOOOOOOOOOOOOPOOOOOOOOOOOONOOOOOOPOOOPOPOO "
" OOOOOPOOOPOOOOPPNPOOOPOPOOPPOOPPOOOOOPOOOPOPOPPPOPOPOPOPOPOOOPOPOOOOOOOOOOOO "
" OOOONOOOOOOOOOOOOOOOOPOOOPOPOPOPOPOPOPOPOOPOOPPOOPOPOOOPOPOOOOOOOOOONOOOOOOO "
" OOOPOPOOOPOPOOPPOOPOOPOPOOOPOPOPOOOPOOOPOOOOOOOOOOOOOOOONOOOOOOOOOOOOOOOOOOP "
" OPOOOPOPOOOONOOOOPOPOOPPOPOOOOPPOPPPOPPPOPOONOOPOPPPOPOPOOOONOOOOPOOOPPPOPOO "
" NOOPOOOONOOOOPOONOOONOOONONONNNNMNNNNONONOOONOOONOOPOOOONOOOOPOONOOPOPPOOPOP "
" OOOONOOOOPOPOPPPOPOONOOPOPPPOPPPOPOOOOPPOPPPOOOPOOOONOOOOPOOOPPPOPOOOOOOOPOO "
" OPOOOOOONOOOOOOPOOOPOOPOOOOOOPPPOOOPOPOPOOOPOOPPOPPPPPOOOPOPOPPOOPOPOOOONOOO "
" OPOPOOPPOPPPOOOPPPPPOPPOOPOPOPOPOPOPOPPPOPOOOPOOOPOOOOOOOOOONOOOOOOOOOOPOOOP "
" OOOPOPPPOPOPOPPPOPOPOPOPOPPPOPPPOPPPOPPPOPPPPPPPOPPPOPPPOPOPPPPPOPPPPPPPOPPP "
" OPPPOPOPPOPPOPPPOPOPOOPPOPOOOPOOOOOONOOOOOOPOOOPOPPOOPOPOPPPOPPOPPOPOPPPOPPP "
" OPPPPPPPOPPPPPOPOPPPOPPPOPPPPPPPOPPPPPPPOPPPPPPPOPPPOPPPOPPPOPPPOPPPOPOPOPOP "
" OPOOOOOOOOOONOOOOOOOOOOPOPOPOPOPOPPPOPPPOPPPOPPPOPPPOPPPPPPPOPPPPPPPOPPPPPPP "
" OPPPPPPPOPPPPPPPOPPPPPPPOPPPPPPPOPPPPPPPPPPPPPPPOPPPPPPPPPPPPPPPOPPPPPPPOPPP "
" PPPPOPPPPPPPPPPPPPPPOPPPPPPPPPPPPPPPOPPPPPPPOPPPPPPPOPPPOPPPOPPPPPPPOPPPPPPP "
" OPPPOPPPOPOPOPPPOPPPOPOPOOOPOPOOOOOOOOOONOOOOOOOOOOPOPOOOPOPOPPPOPPPOPOPOPPP "
" OPPPOPPPPPPPOPPPPPPPOPPPOPPPOPOPOPPPOPPPPPPPOPPPPPPPPPPPPPPPOOOPPPPPPPPPPPPP "
" OOPPPPPPOPPPOPOONOOPOPPPOPPPPPPOOPPPPPPPPPPPPPOOOOPPPPPPPPPPPPPPOPPPPPPPOPPP "
" OPOONOOPOPPPOPPPPPPPOPPPPPPPOPPPOPOONOOPOPPPOPPPOPOONOOPOPOONOOONONNMNNONOOO "
" NOOPOPOONOOPOPPPOPPPOPOONOOPOPPPOPPPPPPPOPPPPQPPOPPPOPOONOOPOPPPOPPPPPPPOPPP "
" PPPPPPPPPPOOOOPPPPPPPPPPPPPOOPPPPPPPOPPPOPOONOOPOPPPOPPPPPPPOOPPPPPPPPPPPPPP "
" OOOPPPPPPPPPPPPPPPPPPQPQOPPPOPPPOPOPOPPPPQPPPPPQPPPPPPPPPPPPOPOPOPPPPPPPPPPP "
" PQOOOPPPPPPOOPPPOPOONOOPOPPPOOPPPPPPOOOPPPPPPPPPPPPPOPOPOPPPPPPPPPPPPPPPPPPP "
" PPPPPPPPOPPPOPPPOPPPPPPPPPPPPPPPPQPPPPPPOPPPPPPPPPPPPPPPOPPPPPPPPPPPPPPPOPPP "
" PPPPOPPPPPPPOPPPPPPPPPPPPPPPOPPPPQPQPPPPPPPPOPPPPPPPOPPPPPPPOPPQPQPPPQPQPPPP "
" OPPPPQPPOPPPOPPPOPPPPPPPOPPPOPOPOPPPOPOOOPOOOOOONOOOOOOPOOOPOPPPOPOPOPPPOPPP "
" PQPPOPPPOPPPOPPQPPPPOPPPPQPPPQQPPQPPOPPPPPPPOPPPPPPPOPPPPPPQPPPPPPPPOPPPPPPP "
" PPPPPPPPPPPPPPPPPPPPPPPPOPPPPPPPPPPPPPPPOPPPPPPPPPPPPPPPOPPQPPPPPPPPPQPPPPPP "
" PQPPPPPPPPPPOPPPPPPPPPPPPPPPPPPQPPPQPPPPPQPQPPPPPPPPPPPQPPPQPPPPPPPPPPPPPPPP "
" OPPPPPPPPPPPPPPPPQPPPPPPPPPPPPPPOPPPPPPQPPPQPQPQPPPPPPPPPQPPPPQQOPPPPPPQPPPQ "
" PPQPPPPPPQPQPPPPPPPPOPPPPPPQPPPPPPPPPPPPPPPPPPPPPPPPOPPPPPPPPPPQPPPPPPPPPPPP "
" PPPPPPPPOQPPPQPPPQPPPPPPOPPPPPPQPPPQPPPPOPPQPQQQPQPQPPPPOQPPPPPPOPPPPPPPOPPQ "
" PPPPOPPPOPPPOPPPOPOPOPOOOOOONOOOOOOPOPOPOPPPOPPPOPPPOPPPPQPPOPPPPPPPOPPPPPPP "
" OPPPPQPPPQPPPPPPOPPPPPPQPPPPPPPPOPPPPPPPPPPPPPPPOQPPPQPPPPPPPPPQPPPQPQPPPQQP "
" PQPPOPPQPPQQPPPQPQPPPPPQPPPPPPPPPPPPOPPPPPPQPPPQPQPPPPPPPQQQPQPQPPQQOPPPPQPQ "
" PQPQPQPQPPPPPQPQPQPQPQPQPPPQPPPPPQPPPQPPPPPPPPPPPPPPPPPPOPPPPPPPPPPPPPPPPPPP "
" PPPQPPPPPQPQPQPQPPQQPQPQPQPPPQPQPQPPPQPPPPPPOPPPPPPQPPPQPQQQPPPQPPQQPQQPPQPQ "
" PQPQPQPQPPQQPPPPPQQPPQPPPQPQQPQQOQQPPQPQPPQQPQQQPPPQPPQPPQPQQQQQPQPQPQPQPQQP "
" PQPQPQQQPQQQPQQQQQQQPQQQPQQQPQQQPQQQPQQQPQPQPQQQPQQQPQPQPQPQPQPQPQPQPPPPPPPP "
" PPPPPPPPOPPPPPPPPPPPPPPPPQPQPQPQPQPQPQPQPQQQPQPQPQQQPQQQPQQQPQQQPQQQPQQQPQQQ "
" PQQQPQPQQQPQPQQPQQPQPQQQPQQQPQPQPPQPPQQPPQPQPPPQPQPPPPPPPPPPOPPPPPPPPPPQPQPP "
" PQPQPPQQPPQPPQPQPQQQPQQQPQPQQPQQPQPQQQPQPQQQPQQQPQPQPQQQPQQQPQQQPQPQPQQQPQPQ "
" PQQQPPPPPQPQPPPQPQPQPPPPPPPPPPPPPPPPOPPPPPPPPPPPPPPPPQPPPQPPPQPQPQPPPPPQPQQQ "
" PQQQPQPQPPQQPQQQPQPQPPPPOPPPPQPQPQQQPQQPPPPQQQQQPQQQPQPPPPPQQQQQPPQQQPQQPPQQ "
" QQQQPQQQPQPPOPPQPQQQPQQQQQQPPPQQPQQPPQPQPPPPOPPPPQPQPQQQPQPPPQQQQQQQPQQQPQPP "
" OPPQPQQQPQPQPPPPOPPPPQPQPQQQPQPPOPPQPPPPOPPPPQPPOPPPOPPPOPOPOOOONOOOOPOPOPPP "
" OPPPOPPQPPPPOPPPPQPPOPPQPQQQPQPQPPPPOPPPPQPQPQQQPQPPOPPQPQQQPQQQQQPPPQQQPQQQ "
" PQPQPPPPOPPPPQPPPQQQPQQPPPQQQQQQPQQQPQPPOPPQPQQQPQQQQPQQPPQQQQQQPPQQPQPPPPPQ "
" QQQQPQQQQQQPPPPQPQQQPQPQPPPPOPPPPQPQPQQQPQPQPPQQQQQQPQQQPQPPPPPQPQPPPQQQPQPP "
" PPQPPQPPPQPPPPPPOPPPPPPQPPPQPPQPPPPQPQQQPPPQQQPQPPPPPQPQPQQQQQQQPQPQPQQQPQQQ "
" PQQQPQPQPQQQPQPQQPQQPQQQQQQQQQQQPQPQPQQQPPQQPQQQQQPPPQQQPQQPPQPQPPPPOPPPPQPQ "
" PPQQPQQQPPPQQQQQPQQPQQQQPQPQPQQQQQQQQQQQPQQPQQPQPQQQPQQQPQQQPQQQPQQQPQQQPQQQ "
" QQQQPQQQPQPQPQQQPQPQPQQQPQPPPQPPPQPPPPPPPPPPOPPPPPPPPPPQPPPQPPPQPQQQPQPQPQQQ "
" PQPQPQQQPQQQQQQQPQQQPQQQPQQQQQQQPQQQPQQQPQQQPQQQPQQQQQQQPQQQQQQQPQQQQQQQPQQQ "
" QQQQPQQQQQQQQQQQQQQQPQQQQQQQPQQQQQQQPQQQPQQQQQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQ "
" PQQQQQQQPQQQPQQQQQPQQQQQPQQQQQQQPQQQPQQQPQPQQPQQPQQQPQPQPPQQPQPPPQPPPPPPOPPP "
" PPPQPPPQPQQPPQPQPQQQPQQPQQPQPQQQPQQQPQQQQQQQPQQQQQPQQQQQPQQQPQQQQQQQPQQQQQQQ "
" PQQQQRQQQQQQQQQQPQQQQQQQQQQQPQQQPQQQQQQQPQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQQQQQ "
" QQQQPQQQQQQQQQQQQQQQPQQQQQQQPQQQQQQQPQQQQQQQPQQQQQQQPQQQQQQQPQQQPQQQPQQQPQQQ "
" PQQQPQPQPQPQPQPPPPPPPPPPOPPPPPPPPPPQPQPQPQPQPQQQPQQQPQQQPQQQPQQQPQQQQQQQPQQQ "
" QQQQPQQQQQQQPQQQQQQQPQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQ "
" PQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQQQQQ "
" QQQQQQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQ "
" QQQQQQQQPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQQQQQQQQQRQQQQQQQQQQQQQQQQQQQQPQQQ "
" QQQQQQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQPQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQ "
" PQQQQQQQPQQQQQQQPQQQPQQQPQQQQQQQPQQQQQQQPQQQPQQQPQPQPQQQPQQQPQPQPPPQPQPPPPPP "
" PPPPOPPPPPPPPPPQPQPPPQPQPQQQPQQQPQPQPQQQPQQQPQQQQQQQPQQQQQQQPQQQPQQQPQQQQQQQ "
" PQQQQQQQPQQQQQQQQQQQQQQQPQQQQQQRQQQQQQQQPQQQQQQQPQQQQQQQPQQQPQQQPQQRQQQQPQQQ "
" QQQQQQQQQQQQPQQQQQQQQQQQQRQRQQQQQQQQQQQQQQQQPQPQPQQRQQQRQQQQQQQQQQQQQQQQQQQQ "
" PPPQQQQQQQQQQQQQPPQQQQQQPQQQPQPPOPPQPQQQPQQQQQQPPQQQQQQQQQQRQQPPPQQQQQQQQQQR "
" QQQQQQQQQQQQQRQQPQPQPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPPQQQQQQQQQQQQQQPQQQQQQQ "
" PQQQPQPPOPPQPQQQPQQQQQQQPQQRQQQQQQQQQQQPPQQQQRQQQRQQQQQQPQQQQQQQPQQQPQPPOPPQ "
" PQQQPQQQQQQQPQQQQRQQPQQQPQPPOPPQPQQQPQQQPQPPOPPQPQPPOPPPOPOONOOPOPPPOPPQPQPP "
" OPPQPQQQPQQQPQPPOPPQPQQQPQQQQQQQPQQQQQQQPQQQPQPPOPPQPQQQPQQQQQQQPQQQQQQQQQQQ "
" QQQPPQQQQQQQQQRQQRQQPQQQQRQQPQQQPQPPOPPQPQQQPQQRQQQQPQQRQQQQQQQQQQQQPPQQQQQQ "
" QRQQQQQRQQQQQRQRQRQQPQPQPPPQQRQRQRQRQQQQQQQQQQQQQQQRQRPPPQQQQQQQQQQQQQQPPQQQ "
" QQQQPQQQPQPPOPPQPQQQPQQQQQQQPPQQQQQQQQQQQRQQPPPQQQQQQQQQQQQRQQQQQRQRQQQQQQQQ "
" PQPQPQQRQRQRQRQRQQQQQQQRQQQQQQQQQQQQQRQQQRRQQRRQPRQQQQQQPQQQQQQQPQQQPQQQPQQR "
" QRQQQQRQQQQQQQQRQQQQQQQQQQQQQQQQQRQQQQQQQRQQPQQQPQQQPQQQQQQQQQQRQQQQQQQQQQQR "
" QQQQPQPQPQQQQQQQQQQQQQPPPQQQQQQPPQQQPQPPOPPQPQQQPPQQQQQQPPPRQQQQQQQQQRQQPQPQ "
" PRQRQQQQQQQRQQQQQQQQQRQQQRQQPQQQPQQQPQQRQQQRQQQQQQQRQQQQQQQQQQQRQQQQQQQQQRQQ "
" QQQQQQQQQQQQQQQQPQQQQQQQPQQQQQQQPQQRQQQQQQQQQRQQQQQQQQQQQQQQQQQRQQQQQRQRQRQQ "
" QRQRPQQQQQQRQQQRQRQQQQQQQQQQQRQQQQQQPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPQQQQQQQ "
" QQQQQQQQPQQQQQQQQQQQQRQRPQQQQRQRQQQQQQQQQQQRQRQRQQQRQQQQPQQQQRQRQRRQQRQQQQQR "
" QRQQQQQQQQQQPQQRQQQQQQQQQQQQPQQQQQQRQQQQQRQQPQQRQQRQQRRRQRQQQQRRQRRQQRQRQQQQ "
" PQQQQRQQQQRQQRQQPQQQQQQQPQQQQQQQPQQRQRQQQRQRQQQQPQQQQRQQPQQQPQQQPQQRQQQQPQQQ "
" PQPQPQQQPQPPPQPPPPPPOPPPPPPQPPPQPQQQPQPQPQQQPQQQQRQQPQQQPQQQPQQRQQQQPQQQQRQQ "
" QQRRQRQQPQQQQQQQPQQQQQQQPQQRQQRQQRQQQQQQPQQQQRQQQRRRQRQQQQRRRQQQQRRQQRQQPQQR "
" QRQQQQQQQQQQPQQQQQQRQQQQQRQQPQQRQQQQQQQQQRQQQQQRQRQRQQQRQQQQPQQQQRQRQQQQQRQQ "
" QQQRQRQRQQQQQRQRQQQRQRQQQQQQQQQQQQQQQRQQQQQQQQQQPQQQQQQQQQQQQQQQQQQQQQQQQQQQ "
" QQQQPQQQQQQRQQQRQRQQQQQRQQQRQRQQQRQRPQQQQQRRQRQRQQQRQQQQQRQRQQRRQQQQQRQRQQQQ "
" QRRQQRQQQQQQQQQQQQQQQQQQPQQQQQQQQQQRQQQQQQQQQQQRQQQQQRQRQQQQQRRQQRQRQQRRQRQQ "
" QRQRQQRRQRRRQRQRQQQRQRQQQRQRQRQRQQQRQRQRQRQRQRQQQRQQQQQQQQQQQQQQQQQQQQQQQQQQ "
" PQQQQQQQQQQQQQQQQRQQQRQQQQQRQRQRQRQRQQQRQRQRQRQQQRQQQRQQQRQQQQQQPQQQQQQRQQQR "
" QRRRQQQRQQRQQRRQQRQRQQQQQRQRQRQRQQQRQQRQQQQQQRQQRQRRPRQQQQQRQQQRQRRQQQQQQQRR "
" QRQRRRQQQQQQQQQRQQRQQRQRQQQRQRQRQRQQQQQQPQQQQQQRQRQRQQRQQQQRQRQRQQQRQRQQQQQR "
" QQQRQQQQQQQQQQQQQRQQQQQQQQQQPQQQQQQQQQQQQQQQQQQQQQRQQRQQQQQQQQQRQRQQQRQRQRQQ "
" QQQQQRQRQRQRQQQRPQRQQRQRQRRRQRQRQQRRQRQRQQQQQQQQPQQQQQQRQRQRQRRRQQQRQRRRQRQR "
" QRQQPQQRQRRRQRRRRQRQQRRRQRRRQRQRQQQQPQRQQRQQQRQQQQQQPQQQQQQRQRQRQQQQPQQRQRRR "
" QRQRQQQQPRQQQQQQPQQQQQQQPQQRQQQQPQQQPQQQPQQQPQPQPQPPPPPPOPPPPPPQPQPQPQQQPQQQ "
" PQQQPQQQQQQQPQQQQQQQPQQQQQQQPRQQQRQRQRRRQQQQPQQRQRQRQRQQQQQQPQQQQQQQQRQRQQQQ "
" PQQQQQQQQRRRQQQQQQRRQRQQQRQQQQQQPQQQQQQRQQQRQRRQQQQRQRQRQQQQQQQQPQQQQQQRQQQR "
" QQQRQQQRQRQRQRQRQQQRPQRQQRQRQRRRQRQQQQQRQRQQQRQRQQRQQQQRQRRQQQRQQRQRQRRRRRQQ "
" QRRQQRQQPQQQQQRRQQQRRQRRQRQQQQRQQQRRQRQQQQQRQRRRQQQRQQQQQQQRQRQRQRQQQQQQPQQQ "
" QQQRQRQRQRQRQQQRQQRRQRRRQRQQQQQQQRQRQRRRRRRQQRRQQRRRQRQRRQRRPRQQQRQRQRRRQRRR "
" QQRRQQRRQRRRQRRRQQQQQRQRQRRQQRRRQRQRQRRRQRRRQRRRQRQRQRRRQRQRQRQRQRRQQRQRQRRR "
" QRQRQRQRQQQQQRQQQRQQQQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQQQQRQQQRQQQQQRQRQRQRQRQR "
" QRQQQRRRQRQRQRQRQRRRQRRRQRRRQRRRQRQRRQRRQRRQQRRRQRRRQRQRQRRRQQRRQRRRQRQQQRRR "
" QRQQQRQQQQQQPQQQQQQRQQQRQRRRQQQRQRRRQRRQRRRRQRQRQRRRQRQRRQRRQRRQRRQRQRRRQRRR "
" QRRRQRRRQRRRQRRRQRQRRQRRQRQRQRQRQRRRRRQRQQRRQRQQQRRRQRRQRRQRRQRRPRRQRRQRQQRR "
" QRRRQQQRQRRQQRQRRRRRQRQRQRRRQRQQRRQRQRRRQRRRRRRRRRRRQRRRQRRRQRRRQRRRQRRRRRQR "
" QRRRQRRRQRRRRRRRQRRRRRRRQRRRRRRRRRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRR "
" RRRRQRRRQRRRQRRRRRRRQRRRRRRRQRRRQRRRQRRRQRRRQRRRQRRRQRRRQRRRQRQRQRQRQRQRQRQR "
" QQQQQQQQQQQQQQQQPQQQQQQQQQQQQQQQQRQRQRQRQRQRQRQRQRRRQRRRQRRRQRRRQRRRQRRRQRRR "
" QRRRQRRRRRRRQRRRQRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRR "
" QRRRRRRRQRRRQRRRRRRRQRRRQRRRRRQRRRRRQRRRQRRRRRRRQRRRRRRRQRRRQRRRQRQRRRQRQRRQ "
" RRQRQRRRQRRRQRQRQQRQQRRQQRQRQQQRQRQQQQQQQQQQPQQQQQQQQQQRQRQQQRQRQQRRQQRQQRQR "
" QRRRQRRRQRQRRQRRQRQRRRQRQRRRQRRRQRRRRRRRQRRRRRRRQRRRQRRRRRQRRRRRQRRRQRRRRRRR "
" QRRRQRRRRRRRQRRRRRRRQRRRQRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRQRRRQRRRRRRRQRRRQRRR "
" QRRRRRRRQRQRQRQRQRRRQRRRQRQRQRRRQRRRQRRRQQQRQRQRQQQRQRQRQQQQQQQQQQQQQQQQPQQQ "
" QQQQQQQQQQQQQRQRQRQQQRQRQRQQQRRQQRQRQRRRQRQRQRRRQRRRQRRRQRQRQRQRQRRRQRRRRRRR "
" QRRQRRRRQRRRQRRRQQQRRRRRQRRRRRRRQQRRQRRRQRQRQQQQPQQQQRQRQRRRQRRQQRRRRRRRQRRR "
" RRQQQRQRQRRRRRRRRQRRQRRRRRRRQRRRQRQRQQQRQRRRRRRRRRRRQQQRRRRRRRQRRQRRQQQQRRRR "
" QQRRRRRRQQRRRRRRQRRRQRQQPQQRQRRRQRRRRRRQQRRRRRRQQRRRRRQQQQQRRRRRQRRRRRQQQRRR "
" QRRRQRQRQQQQPQQQQRQRQRRRQRRRQQRRRRRRQRRRQRQQQQRRRRRRRRRRRRRRQRRRRRRRQRRRQRQQ "
" PQQRQRRRQRRRRRRRQRRRQRRRQRQRQQQQPQQQQRQRQRRRQRRQQRRRRRRRQRRRQRQQPQQRQRRRQRQR "
" QQQQPQQQQRQRQRRRQRQQPQQRQQQQPQQQQRQQPQQQPQQQPQPQPPPPOPPPPQPQPQQQPQQQPQQRQQQQ "
" PQQQQRQQPQQRQRRRQRQRQQQQPQQQQRQRQRRRQRQQPQQRQRRRQRRRRRRQQRRRQRRRQRQRQQQQPQQQ "
" QRQRQRRRQRRRQRRRRRRRQRRRQRQQPQQRQRRRQRRRRRRRQRRRRRRRRRRRQRQQQQRRRRRRQRRRRRRR "
" QQRRQRRRQRQRQQQQPQQQQRQRQRRRQRQQQRRRRRRRQRRRRRQQQQQRRRRQQRRRRRRQQRRRRRRRQRRR "
" QRQQPQQRQRRRQRRRRRRRQQRRRRRRQQQRRQRRQQQQRRRRRRRRRRRRQQQRRRRRQRRRQRQRQQQRQRRR "
" RRRRRQRRQRRRRRRRRRRRRRQQQRQRQRRRQRRRRRRQQRRRQRRRQRQRQQQQPQQQQRQRQRRRQRRRQQRR "
" RRRRQRRRQRRRQQQRRRRRRRRRRRRRQRRQRRRRQRRRQRQRQRQRQRRRQRRRQRQRQRRRRRRRQRRRQRQQ "
" QRQQRRQQQRRRQRQQQQRQQRQQQRQQQQQQPQQQQQQRQQQRQQRQQQQRQRRRQQQRRRQRQQQRQRRRQRRR "
" RRRRQRQRQRRRRRRRQRRRQRQRQRQRQRRRQRRRQRRRRRRRRRRRRRRRQRRRQRRRQRRRRRRRQRRRRRRR "
" QRRRRRRRQRRRQRRRQRRRRRRRQRRSQRRRRRQRRRRRQRRRRRRRRRRRRRRRRRRRRRRRQRRRQRRRQRRR "
" RRRRQRQRRQRRQRRRRRRRRRRRQRQRQRRRRQRRQRRRRRQQQRRRQRRQQRQRQQQQPQQQQRQRQQRRQRRR "
" QQQRRRRRQRRQRRRRQRQRQRRRRRRRRRRRQRRQRRQRRRRRRRRRQRRRQRRRQRRRRRRRRRRRRRRRRRRR "
" RRRRQRRRRRQRRRRRQRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRR "
" RRRRRRRRQRRRRRRRQRRRQRRRQRRRRRRRQRRRQRRRQRRRRRRRQRRRQRQRQRRRQRQRQRRRQRQQQRQQ "
" QRQQQQQQQQQQPQQQQQQQQQQRQQQRQQQRQRRRQRQRQRRRQRQRQRRRQRRRRRRRQRRRQRRRQRRRRRRR "
" QRRRQRRRQRRRRRRRQRRRRRRRRRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRRRRRRRRRQRRRRRRRQRRR "
" RRRRQRRRRRRRQRRRRSRRQRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRRQRRRRRRR "
" RRRRRRRRQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRRQRRR "
" RRRSQRRRRRRRRRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRSRRRRRRRRRRRSRRRSQSRRRSRRRSRRRRRR "
" QRRRRRRSRRRRRRRRQSRRRRRRQSRRRRRRRRRRQRRRRRRRRRRRQRRRRRRRRRRSRRRRQRRRRRRRQRRR "
" RRRRQRRRQSRRRRQRRRRRQRRRRSRRQRRRQRRRQRQRRQRRQRRRQRQRQQRRQRQQQRQQQQQQPQQQQQQR "
" QQQRQRRQQRQRQRRRQRRQRSQRQRRRQRRRQRRRRRRRQRRRRSQRRRRRQRRRQRRRRRRRQRRRRRRRQRRR "
" RRRRRRRRRRRRQRRRRSRRRRRSQRRRRRRRRRRRQSRRRRRSQSRRRRRRRRRRRRRRQRRRRRRRRRRRRRRR "
" QRRRRRRRRRRRRRRRRRRSRRRRRRRRRRRRQRRRRRRRRRRRRSRRRRRRRRRRQRRRRRRRQRRRRRRRRRRR "
" RRRRQRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRRRRRRRRRR "
" RRRRRRRRQRRRRRRRRRRRRRRRRRRRRRRRRRRRRSRRQRRSRRRRRRRRRRRRQRRRRRRRRRRRRRRRQRRR "
" RRRRRRRRRRRRQRRRRRRRRRRRRRRRQRRRRRRRRSRRRRRRQRRRRRRRQRRRRSRRQRRRRRRRQRRRRRRR "
" QRRRRRRRQRRRQRRRQRRRQRRRQRRRQRQRQRQRQRQQQQQQQQQQPQQQQQQQQQQRQRQRQRQRQRRRQRRR "
" QRRRQRRRQRRRQSRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRRRRRRQRRSRRRRRRRRRRRRQRRRRRRR "
" RRRRRRRRQRRRRRRRRRRSRRRRQRRSRSRRRRRRRRRRQRRSRRRRRRRRRSRRQRRRRRRSRRRSRSRRRRRR "
" RRRRRRRRRRRRQSRRRSRRRSRRRRRRRRRRRSRRRRRRRRRRQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR "
" QRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQRRRRRRRRRRSRRRSRRRRRRRSRRRRRSRRQRRRRRRRRRRR "
" RRRRRRRRRSRRRRRSRRRRQRRRRRRRRRRRRSRRRRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRRRRRRRRRR "
" RRRRRSRRRRRRRRRRRSRSRRRRRRRSRRRRRRRRRRRRQRRRRRRRRRRRRSRRRRRRRRRSRRRRRRRRRRRR "
" RRRRRRRRRRRRRRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQRRRRRRRRRRRRSRR "
" RRRRRSRRRRRRRRRRQRRRRSRRRRRSRRRRRRRRRSRSRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR "
" RRRRQRRRRRRRRRRSRRRRRRRRRRSRRRRRRSRRRRRRRRRRRRRSRRRRRRRRRSRSRRRRRRRRQRRRRRRS "
" RSRRRRRRRRRRRRRRRRRRRRRRQRRRRRRRRRRSRRRRRRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRRQRRR "
" RRRRRRRRRRRRQRRRRRRRRRRRRRRRRRRRRSRRRRRRRRRRQRRRRRRRRRRSRRRRRRRRRSRSRRRRRRRR "
" QRRRRRRRRRRSRRRRQRRRRSRRRRRRRRRRQRRRRRRRQRRRRRRRQRRSRSRRRSRRRRRRQRRRRSRRRSRR "
" RRRRQRRRRRRRQSRRRRRRQRRRQRRRQRRRRRRRQRRRRRRRQRRRQRRRQRQRQRRRQRRRQRQRQQQRQRQQ "
" QQQQQQQQPQQQQQQQQQQRQRQQQRQRQRRRQRRRQRQRQRRRQRRRQRRRRRRRQRRRRRRRQRRRQRRRQRRR "
" RRRRQSRRRRRRQRRRRRRRRSRSRRRRQRRRRSRRRRRSRRRRQRRRRRRRQRRRRRRRQRRSRSRRRRRSRRRR "
" QRRRRSRRRRRRRRRRQRRRRRRSRRRSRRRRRRRSRSRRRRRSRRRRQRRRRRRSRRRSRRSRRRRSRSRRRRRR "
" RRRRQRRRRSRRRRRRRRRRQRRRRRRRRRRRRRRRQRRRRRRRQRRRRRRRQRRRRRSRRSRSRRRRQRRRRRRR "
" RRRSRRRRRRRRRRRSRSRRRRRRQRRRRRRRRRRSRRRRRRRRRRRRRRSSRSSRRRRRRRRRRRRRRSRSRRRR "
" RRRRRRRRRRRRQRRRQRRSQRRRRSSRRSRRRRSRRRRRRSRRRRRRRSRSRRRRRRRRRRRRRRRRRRRRRRRR "
" QRQRQRRRRRRRRRRRRRRRRSRRRRRRRRRRQQQRRRRRRRRRRRRRQQRRRRRRQRRRQRQQPQQRQRRRQRRR "
" RRRQQRRRRRRRRRRSRRQQQRRRRRRRRRRRRRRRRSRRRRSRRRRRQRQRQRRRRRRRRRRRRRRSRRRRRSSR "
" RRRSRRRRRRRRRRRRRRRRRRRRRRRRRSRRQRRRQRRRQRQRQRRRRRRRRRRRRRRRRSRSRRRRRSRRRRRR "
" RSRRRSRSRRRRRRRRRRRRRRRRRRRRQQQRRRRRRSRRRRRRRRRRRRRRRRRSRRRRQQRRRRRRRRRRRSRR "
" QRRRRRRRQRRRQRQQPQQRQRRRQRRRRRRRQRRSRRRRRRRRRSRQQRRRRRRRRSRRRRRRRSRRRSRSRRRR "
" RRQQQQRRRRRSRRSRRSRRRRSRRSRSRSRRRRRRQRRSRRRRRSRRRSRRQRRSRSRRQRRRQRQQPQQRQRRR "
" QRRSRRRRQRRRRSRRRSRRRRRRQRRRRRRSRSSRRSRRQRRSRRRRQRRRQRQQPQQRQRRRQRRSRRRRQRRR "
" RSRRQRRRQRQQPQQRQRRRQRRRQRQQPQQRQRQQPQQQPQPPOPPQPQQQPQQRQRQQPQQRQRRRQRRRQRQQ "
" PQQRQRRRQRRSRRRRQRRRRSRRQRRRQRQQPQQRQRRRQRRRRRRRQRRSRRRSRRRRRRRRQRRRRRRSRRRS "
" RSRRQRRSRSRRQRRRQRQQPQQRQRRRQRRSRSRRQRRSRSRRRRRRRRRRQRRSRRRSRSRRRSRRRSRRRSRS "
" RRRRRRQQQQRRRRRSRRRSRRRRRRRRSSRRRRSRRRRQQRRSRRRRRSSRRSRRQRRRRSRRQRRRQRQQPQQR "
" QRRRQRRSRRRRQRRSRRSRRRRRRSRRQQRRRRSRRRRSRRRSRRRRRRRRRRRRRRRRQQQRRRRSRSRSRSRR "
" RRSSRRRSRRRRRSSRRRRRRSRRRSSRRSSSRSSSRSRSQSRRQRRRQRQRQSRSRRSSRRSSRSSSRSSSRSRS "
" RRRSRRRRRRRSRSRRRRRSRRRSRSSRRRSRQRQRQRRRRRRRRRRSRRRRRRRRRRRRRRRSRSQQQRRRRRRR "
" RRRRRRRQQRRRRRRRQRRRQRQQPQQRQRRRQRRRRRRRQQRRRRRRRRRRRSRRQQQSRRRRRRRRRRRSRRRR "
" RSRRRSSRRRRRQRQRQRRRRRRRRSRSRSRRRRRSRSRSRSSRRSRRRSRRRSSSRSSSRSRRRSRRRSRRRSRR "
" QRRRQRRSQSRSRSSSRSSSRRSSRRSSRSSSRRRSRRRSRSRSRSSSRRRSRSRSRSRSRRRSRRRRRRRRRRSS "
" RSRSRRSRSSRRRSSRRRRRQRRSRSRRRRRSRSRRQRRSRSRRRRRRRRRRQRRRRRRRQRRSRSRRQRRSRSSS "
" RRSSRSRRRRRRRRRSRRRSRSRRRRRSRRSSRRRSRRRSRRRRRSRSRRRSRSRSRSRRRSRSRSSSRRRSRSRS "
" RRRRRSSRRSRRQRRSRSRRQRRRRRRRQRRRRRRRRRRSRSRRRSRSRRSSRRRRRSRSRSRRRSRSRSRRRRSR "
" RRRRRSRRQSRRQRRRQRRRRRRRRSRRRRRRRRRRRRRSRSRSQRQRQRRSRRRRRRRRRSQQQRRRRRRQQRRR "
" QRQQPQQRQRRRQQRRRRRRQQQSRRRRRRRRRSRRQRQRQSRSRSRRRRRRRRRRRSRRRSSRRSRRQRRRQRRR "
" QSSSRRSRRRRSRRRSRSRSRSSSRSRSRSRSRSRSRSRSRSSSRSRRRSSSRSRRQRRSRSRRQRRSRSRSQRRS "
" RSSSRRRSRSSSRSRRRSRSRRRSRSSSRSRSRSRSRSRRRSRSRSRSRRSSRRRSRSRRRRRRRRRSRRSRRRRR "
" RRRSRRRSRRRRRSRRRRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRRQRRSRRRRRRRRRSRRQRRRRRSRRRRR "
" RRRSRRRRRSRSRRSSRRRSRRRSRRRSRSRSRSRSRRRSRSRSRSRSRRSSRSRRRSRSRSSSRSSSRRSSRRRS "
" RSSRRSSSQSRSRRRRRSRSRSSRRSRRRSSSRSSSRSRSRRRSRRRSRSRRRSRRRRRSRSRRRSRRRRRRQRRR "
" RRRSRRRSRRRRRRRRRSRSRSRSRRRRRSRSRRRRRRRRRRRRRRRRRRRRRRRRRRRRQRRRRRRRRRRRRRRR "
" RRRRRRRRRRRRRRRRQRRRRSRSRRRSRRRRRRRSRRRRRRSRRSRSQRRSRRRRRRSSRSRSRRRRRSRSRSRR "
" RSRSRRRSRSSSRRSSRSSSRRRSRSSSRSRSRRRRQRRRRSRSRSSSRSSRRSSSRSRRRSSSRSRRRRRSRSSS "
" RSSSRRRRRSRRRSRSRRRRRSRRQRRSRRSSRSRSRSRSRRRSRRRRRRRRRRRRQRRRRRRSRRRSRSSSRRRS "
" RSRSRRSSRSRRQRRSRSSRRSRSSRRSRRSSSSSRRSSSRSRRRRRRRSSRRSSSSSRRRRSSRSSSRRRSRRRR "
" QRRRRSRRRRSRRSRSRRRSSSRSRRSRRRRRQRRSRRRRRSRRRRRRQRRRRRRSRRRRRSRRQRRSRSSSRSSS "
" RSRRRSSSRSSSRSRSRRRRQRRRRSRRRSSRRSRRQSRRRRRRQRRRRRRRQRRSRSSRRSRSRRRRQRRRRSRR "
" QRRRQRRRQRRSRRRRQRRRQRQRQRRRQRQQQRQQQQQQPQQQQQQRQQQRQRRRQRQRQRRRQRRRRSRRQRRR "
" QRRRQRRSRRRRQRRRRSRRRSSSRSRRQRRRRRRRQRRRRRRRQRRSRRSSRSRSRRRRQRRRRSRSRSSSRSRR "
" RSRSSSSRRSSRRSRRQRRSRSRRRRRRRRRRQRRRRRRSRRRRRRRRQRRSRRSSRSRRSSRSRRSSRSRRRSRS "
" RRRRQRRRRSRSRRSSRRRRRRSSSSSRRRSRRSRRRRRSSSSRRSRSRRRSRRSSSSRRRSSSRSRRQRRSRSSS "
" RRSSRSRSRRRSRSRRRRRRRRRRQRRRRRRSRRRSRSSSRRRSRRRSRSSRRSRRQRRSRRSSRRRSRRRRRSRR "
" RSRSRSSSRSRRRRRSRSSRRSSSRSSRRSRSRSSSRSRSRRRRQRRRRSRSRSSSRSSSRRRSRSRSRRSRRSRS "
" RRRSRSSRRSSSRSRSRRRRRSRSRSSSRSRSRRRSRRSSRSSRRSRRRSRSRRRSRSRRRRRSRSRRRSRRRRRR "
" RRRRRRRRRSRRRRRRRRRRQRRRRRRRRRRSRRRRRRRRRRRRRRRSRSRRRSRSRRRSRSRSRRRRRRRRRSRR "
" RSRRRRRRQRRRRRRSRRRSRSSSRRRSRSSSRSSSRSRSRRRSRRSSRSRSRSSRRSSRRSRSRSSRRSSSQSRS "
" RRRSRSRSSSSSRRSSRRSSRSRSRRSSRSRRRSRSRSSSRSSSRSRSSRSSRSRSRSRSRSRSRSSSRSRSRRRS "
" RSSRSSRSRRSSRRRRRSRSRRRRRSRRRSRRRRRRRSRRRRRRRRRRQRRRRRRRRRRSRRRRRRRSRRSSRRRR "
" RSRSRRRRRSRRRSRSRRSSRSRRRSRSRSSSRSSSRSRSRSRSRSSRSSRSRSSSRSSSRSRSSSSSRSSRRSRS "
" RRSSRSSSRSRSSSSSRSSSSSSSRSSSRSSSRSRSRSSSRSSSRSRSRSSSRSSSRSSSRSSSRSRSRSSSRSSS "
" RSSSRSSSRSSSRSSSRSRSRSSSRSRSRSRSRSRSRSRSRSRSRSRSRSRRRRRSRRRSRRRRRRRRRRRRRRRR "
" QRRRRRRRRRRRRRRRRSRRRSRRRRRSRSRSRSRSRSRSRSRRRSRRRSRSRSSSRSSSRSSSRSSSRSSSRSRS "
" RRSSRSSRRSSSRSSSRSRSRSSSRRRSRSSSRSRRRSSSRSRRRSRRRRRRQRRRRRRSRRRSRSSSRRRSRSSS "
" RSSRSSSSRSRSRSSSRSRSSRRSRSSRSSRSRSSSRSSSRSRSRSRSRSSSRSSSRRRSRRSRRSRRRSRSRRRS "
" SRRSRSRSRSRSRRSSRSRRSSRRSRSSQSSRRRRSRRRSRSSRRSRSRSSSRRSSSSRRRSRRRRRSRRRRSSRS "
" RSSSRRSSSSSSRSRSRSRSRSRSRSRSRRSSRSRRSSRSRSSSRSSSRRRSRSSSRSSSRSSSRRSSRSRSRSRR "
" RRRRQRRRRRRSRSRSRSSRRSSSRSSSRSRSSSRRRSRSRSSSRSSSRRSSRSRSRSSSRSSSRSRSRSRSRSSS "
" RSRRRRSSRRRSRSRSRRRSRRRSRRRRRRRSRRSRRRRRRRRRRSRRRRRRRRRRQRRRRRRRRRRSRRRRRRRR "
" RRRRRSRRRSRRR "
};

最后总结一下,自己离各路大牛的水平还差很远啊。

你可能感兴趣的:(poj)