ch_g

ECUST_ACMer —— ch_g
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2011-03-06 23:22  ch_g  阅读(4291)  评论(2编辑  收藏  举报

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

  链接: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"
};

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