시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 40 14 13 52.000%

문제

계수가 0 또는 1로만 이루어지는 특수한 다항식들의 집합에 대해 생각해보자.

이 집합의 두 다항식을 더하는 방법은 다음과 같다.

  • 우선, 두 다항식을 더한다.
  • 결과 다항식의 각 계수를 2로 나눈 나머지를 각각의 계수에 대입한다.

이때, (0 + 0) mod 2 = 0, (0 + 1) mod 2 = 1, (1 + 0) mod 2 = 1, and (1 + 1) mod 2 = 0 이므로

결국 결과 다항식의 각 차수의 계수는 더하고자 했던 두 다항식의 계수에 대한 XOR 연산의 결과가 된다.

(x 6 + x4 + x2 + x + 1) + (x7 + x + 1) = x7 + x6 + x4 + x2

이제 뺄셈을 정의하는데, 뺄셈의 경우에도 덧셈과 같이 (0 - 0) mod 2 = 0, (0 - 1) mod 2 = 1, (1 - 0) mod 2 = 1, and (1 - 1) mod 2 = 0 이므로
덧셈과 뺄셈은 이 다항식들의 집합에 대해 동일한 의미를 지닌다. (계수 간의 XOR 연산이 새 다항식의 계수가 됨)

예시는 다음과 같다.

(x 6 + x4 + x2 + x + 1) - (x7 + x + 1) = x7 + x6 + x4 + x2

다음으로 곱셈을 정의하는데, 곱셈 또한 일반적인 다항식 간의 곱셈 연산을 한 뒤 각각의 계수를 2로 나눈 나머지를 취하면 된다.

(x 6 + x4 + x2 + x + 1) (x7+ x + 1) = x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1

두 다항식 f(x)와 g(x)의 곱을 h(x)로 나눈 나머지는 f(x)와 g(x)를 위와 같은 방법으로 곱한 뒤, h(x)로 나눈 나머지가 된다.

(x 6 + x4 + x2 + x + 1) (x7 + x + 1) modulo (x8 + x4 + x3 + x + 1) = x7 + x6 + 1

어떤 다항식의 최고차항의 차수를 degree, 줄여서 d라 하면,

f(x), g(x), h(x)의 계수가 0 또는 1이므로 각 다항식은 정수 d+1과 길이 d+1인 비트스트링의 쌍으로 유일하게 표기할 수 있다.

예를 들어 x 7 + x6 + 1은 다음과 같이 표기된다.

8 1 1 0 0 0 0 0 1

이때, 8은 총 비트의 개수이며, 최고차항의 차수(7) + 1이다.

이제 위에서 설명한 성질을 만족하는 세 다항식 f(x), g(x), h(x)가 설명한 형식대로 주어지면 f(x)g(x) modulo h(x)를 계산하면 된다.

입력

입력은 여러 테스트 케이스로 이루어져 있다.

입력의 첫 줄에 테스트케이스의 수 T가 주어지며, 각 테스트 케이스마다 세 줄에 걸쳐 문제에서 설명한 형식대로 표기한 f(x), g(x), h(x)가 주어진다.

출력

각 테스트 케이스마다 한 줄에 f(x)g(x)를 h(x)로 나눈 나머지를 문제에서 설명한 형식대로 출력한다.

예제 입력 1

2
7 1 0 1 0 1 1 1
8 1 0 0 0 0 0 1 1
9 1 0 0 0 1 1 0 1 1
10 1 1 0 1 0 0 1 0 0 1
12 1 1 0 1 0 0 1 1 0 0 1 0
15 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1

예제 출력 1

8 1 1 0 0 0 0 0 1
14 1 1 0 1 1 0 0 1 1 1 0 1 0 0
W3sicHJvYmxlbV9pZCI6IjczNDUiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWIyZTRcdWQ1NmRcdWMyZGRcdWM3NTggXHViMDk4XHViYTM4XHVjOWMwIFx1YzVmMFx1YzBiMCIsImRlc2NyaXB0aW9uIjoiPHA+XHVhY2M0XHVjMjE4XHVhYzAwIDAgXHViNjEwXHViMjk0IDFcdWI4NWNcdWI5Y2MgXHVjNzc0XHViOGU4XHVjNWI0XHVjOWMwXHViMjk0IFx1ZDJiOVx1YzIxOFx1ZDU1YyBcdWIyZTRcdWQ1NmRcdWMyZGRcdWI0ZTRcdWM3NTggXHVjOWQxXHVkNTY5XHVjNWQwJm5ic3A7XHViMzAwXHVkNTc0IFx1YzBkZFx1YWMwMVx1ZDU3NFx1YmNmNFx1Yzc5MC48XC9wPlxyXG5cclxuPHA+XHVjNzc0IFx1YzlkMVx1ZDU2OVx1Yzc1OCBcdWI0NTAgXHViMmU0XHVkNTZkXHVjMmRkXHVjNzQ0IFx1YjM1NFx1ZDU1OFx1YjI5NCBcdWJjMjlcdWJjOTVcdWM3NDAgXHViMmU0XHVjNzRjXHVhY2ZjIFx1YWMxOVx1YjJlNC48XC9wPlxyXG5cclxuPHVsPlxyXG5cdDxsaT5cdWM2YjBcdWMxMjAsIFx1YjQ1MCBcdWIyZTRcdWQ1NmRcdWMyZGRcdWM3NDQgXHViMzU0XHVkNTVjXHViMmU0LjxcL2xpPlxyXG5cdDxsaT5cdWFjYjBcdWFjZmMgXHViMmU0XHVkNTZkXHVjMmRkXHVjNzU4Jm5ic3A7XHVhYzAxIFx1YWNjNFx1YzIxOFx1Yjk3YyAyXHViODVjIFx1YjA5OFx1YjIwOCBcdWIwOThcdWJhMzhcdWM5YzBcdWI5N2MgXHVhYzAxXHVhYzAxXHVjNzU4Jm5ic3A7XHVhY2M0XHVjMjE4XHVjNWQwIFx1YjMwMFx1Yzc4NVx1ZDU1Y1x1YjJlNC48XC9saT5cclxuPFwvdWw+XHJcblxyXG48cD5cdWM3NzRcdWI1NGMsJm5ic3A7KDAgKyAwKSBtb2QgMiA9IDAsICgwICsgMSkgbW9kIDIgPSAxLCAoMSArIDApIG1vZCAyID0gMSwgYW5kICgxICsgMSkgbW9kIDIgPSAwIFx1Yzc3NFx1YmJjMFx1Yjg1YzxcL3A+XHJcblxyXG48cD5cdWFjYjBcdWFkNmQgXHVhY2IwXHVhY2ZjIFx1YjJlNFx1ZDU2ZFx1YzJkZFx1Yzc1OCBcdWFjMDEgXHVjYzI4XHVjMjE4XHVjNzU4IFx1YWNjNFx1YzIxOFx1YjI5NCBcdWIzNTRcdWQ1NThcdWFjZTBcdWM3OTAgXHVkNTg4XHViMzU4IFx1YjQ1MCBcdWIyZTRcdWQ1NmRcdWMyZGRcdWM3NTggXHVhY2M0XHVjMjE4XHVjNWQwIFx1YjMwMFx1ZDU1YyBYT1IgXHVjNWYwXHVjMGIwXHVjNzU4IFx1YWNiMFx1YWNmY1x1YWMwMCBcdWI0MWNcdWIyZTQuPFwvcD5cclxuXHJcbjxwPih4IDxzdXA+NjxcL3N1cD4gKyB4PHN1cD40PFwvc3VwPiArIHg8c3VwPjI8XC9zdXA+ICsgeCArIDEpICsgKHg8c3VwPjc8XC9zdXA+ICsgeCArIDEpID0geDxzdXA+NzxcL3N1cD4gKyB4PHN1cD42PFwvc3VwPiArIHg8c3VwPjQ8XC9zdXA+ICsgeDxzdXA+MjxcL3N1cD48XC9wPlxyXG5cclxuPHA+XHVjNzc0XHVjODFjIFx1YmU4NFx1YzE0OFx1Yzc0NCBcdWM4MTVcdWM3NThcdWQ1NThcdWIyOTRcdWIzNzAsIFx1YmU4NFx1YzE0OFx1Yzc1OCBcdWFjYmRcdWM2YjBcdWM1ZDBcdWIzYzQgXHViMzY3XHVjMTQ4XHVhY2ZjIFx1YWMxOVx1Yzc3NCZuYnNwOygwIC0gMCkgbW9kIDIgPSAwLCAoMCAtJm5ic3A7MSkgbW9kIDIgPSAxLCAoMSAtIDApIG1vZCAyID0gMSwgYW5kICgxIC0gMSkgbW9kIDIgPSAwIFx1Yzc3NFx1YmJjMFx1Yjg1YzxiciBcLz5cclxuXHViMzY3XHVjMTQ4XHVhY2ZjIFx1YmU4NFx1YzE0OFx1Yzc0MCBcdWM3NzQgXHViMmU0XHVkNTZkXHVjMmRkXHViNGU0XHVjNzU4Jm5ic3A7XHVjOWQxXHVkNTY5XHVjNWQwIFx1YjMwMFx1ZDU3NCBcdWIzZDlcdWM3N2NcdWQ1NWMgXHVjNzU4XHViYmY4XHViOTdjIFx1YzljMFx1YjJjY1x1YjJlNC4gKFx1YWNjNFx1YzIxOCBcdWFjMDRcdWM3NTggWE9SIFx1YzVmMFx1YzBiMFx1Yzc3NCBcdWMwYzggXHViMmU0XHVkNTZkXHVjMmRkXHVjNzU4IFx1YWNjNFx1YzIxOFx1YWMwMCBcdWI0MjgpPFwvcD5cclxuXHJcbjxwPlx1YzYwOFx1YzJkY1x1YjI5NCBcdWIyZTRcdWM3NGNcdWFjZmMgXHVhYzE5XHViMmU0LjxcL3A+XHJcblxyXG48cD4oeCA8c3VwPjY8XC9zdXA+ICsgeDxzdXA+NDxcL3N1cD4gKyB4PHN1cD4yPFwvc3VwPiArIHggKyAxKSAtICh4PHN1cD43PFwvc3VwPiArIHggKyAxKSA9IHg8c3VwPjc8XC9zdXA+ICsgeDxzdXA+NjxcL3N1cD4gKyB4PHN1cD40PFwvc3VwPiArIHg8c3VwPjI8XC9zdXA+PFwvcD5cclxuXHJcbjxwPlx1YjJlNFx1Yzc0Y1x1YzczY1x1Yjg1YyBcdWFjZjFcdWMxNDhcdWM3NDQgXHVjODE1XHVjNzU4XHVkNTU4XHViMjk0XHViMzcwLCBcdWFjZjFcdWMxNDggXHViNjEwXHVkNTVjIFx1Yzc3Y1x1YmMxOFx1YzgwMVx1Yzc3OCBcdWIyZTRcdWQ1NmRcdWMyZGQgXHVhYzA0XHVjNzU4IFx1YWNmMVx1YzE0OCBcdWM1ZjBcdWMwYjBcdWM3NDQgXHVkNTVjIFx1YjRhNCBcdWFjMDFcdWFjMDFcdWM3NTggXHVhY2M0XHVjMjE4XHViOTdjIDJcdWI4NWMgXHViMDk4XHViMjA4IFx1YjA5OFx1YmEzOFx1YzljMFx1Yjk3YyBcdWNkZThcdWQ1NThcdWJhNzQgXHViNDFjXHViMmU0LjxcL3A+XHJcblxyXG48cD4oeCA8c3VwPjY8XC9zdXA+ICsgeDxzdXA+NDxcL3N1cD4gKyB4PHN1cD4yPFwvc3VwPiArIHggKyAxKSAoeDxzdXA+NzxcL3N1cD4rIHggKyAxKSA9IHg8c3VwPjEzPFwvc3VwPiArIHg8c3VwPjExPFwvc3VwPiArIHg8c3VwPjk8XC9zdXA+ICsgeDxzdXA+ODxcL3N1cD4gKyB4PHN1cD42PFwvc3VwPiArIHg8c3VwPjU8XC9zdXA+ICsgeDxzdXA+NDxcL3N1cD4gKyB4PHN1cD4zPFwvc3VwPiArIDE8XC9wPlxyXG5cclxuPHA+XHViNDUwIFx1YjJlNFx1ZDU2ZFx1YzJkZCBmKHgpXHVjNjQwIGcoeClcdWM3NTggXHVhY2YxXHVjNzQ0IGgoeClcdWI4NWMgXHViMDk4XHViMjA4IFx1YjA5OFx1YmEzOFx1YzljMFx1YjI5NCBmKHgpXHVjNjQwIGcoeClcdWI5N2MgXHVjNzA0XHVjNjQwIFx1YWMxOVx1Yzc0MCBcdWJjMjlcdWJjOTVcdWM3M2NcdWI4NWMgXHVhY2YxXHVkNTVjIFx1YjRhNCwgaCh4KVx1Yjg1YyBcdWIwOThcdWIyMDggXHViMDk4XHViYTM4XHVjOWMwXHVhYzAwIFx1YjQxY1x1YjJlNC48XC9wPlxyXG5cclxuPHA+KHggPHN1cD42PFwvc3VwPiArIHg8c3VwPjQ8XC9zdXA+ICsgeDxzdXA+MjxcL3N1cD4gKyB4ICsgMSkgKHg8c3VwPjc8XC9zdXA+ICsgeCArIDEpIG1vZHVsbyAoeDxzdXA+ODxcL3N1cD4gKyB4PHN1cD40PFwvc3VwPiArIHg8c3VwPjM8XC9zdXA+ICsgeCArIDEpID0geDxzdXA+NzxcL3N1cD4gKyB4PHN1cD42PFwvc3VwPiArIDE8XC9wPlxyXG5cclxuPHA+XHVjNWI0XHViNWE0IFx1YjJlNFx1ZDU2ZFx1YzJkZFx1Yzc1OCBcdWNkNWNcdWFjZTBcdWNjMjhcdWQ1NmRcdWM3NTggXHVjYzI4XHVjMjE4XHViOTdjIGRlZ3JlZSwgXHVjOTA0XHVjNWVjXHVjMTFjIGRcdWI3N2MgXHVkNTU4XHViYTc0LDxcL3A+XHJcblxyXG48cD5mKHgpLCBnKHgpLCBoKHgpXHVjNzU4IFx1YWNjNFx1YzIxOFx1YWMwMCAwIFx1YjYxMFx1YjI5NCAxXHVjNzc0XHViYmMwXHViODVjIFx1YWMwMSBcdWIyZTRcdWQ1NmRcdWMyZGRcdWM3NDAmbmJzcDtcdWM4MTVcdWMyMTggZCsxXHVhY2ZjIFx1YWUzOFx1Yzc3NCBkKzFcdWM3NzgmbmJzcDtcdWJlNDRcdWQyYjhcdWMyYTRcdWQyYjhcdWI5YzFcdWM3NTggXHVjMzBkXHVjNzNjXHViODVjIFx1YzcyMFx1Yzc3Y1x1ZDU1OFx1YWM4YyZuYnNwO1x1ZDQ1Y1x1YWUzMFx1ZDU2MCBcdWMyMTggXHVjNzg4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM2MDhcdWI5N2MgXHViNGU0XHVjNWI0Jm5ic3A7eCA8c3VwPjc8XC9zdXA+ICsgeDxzdXA+NjxcL3N1cD4gKyAxXHVjNzQwIFx1YjJlNFx1Yzc0Y1x1YWNmYyBcdWFjMTlcdWM3NzQgXHVkNDVjXHVhZTMwXHViNDFjXHViMmU0LjxcL3A+XHJcblxyXG48cD44IDEgMSAwIDAgMCAwIDAgMTxcL3A+XHJcblxyXG48cD5cdWM3NzRcdWI1NGMsIDhcdWM3NDAgXHVjZDFkIFx1YmU0NFx1ZDJiOFx1Yzc1OCBcdWFjMWNcdWMyMThcdWM3NzRcdWJhNzAsIFx1Y2Q1Y1x1YWNlMFx1Y2MyOFx1ZDU2ZFx1Yzc1OCBcdWNjMjhcdWMyMTgoNykgKyAxXHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM3NzRcdWM4MWMgXHVjNzA0XHVjNWQwXHVjMTFjIFx1YzEyNFx1YmE4NVx1ZDU1YyBcdWMxMzFcdWM5YzhcdWM3NDQgXHViOWNjXHVjODcxXHVkNTU4XHViMjk0Jm5ic3A7XHVjMTM4IFx1YjJlNFx1ZDU2ZFx1YzJkZCBmKHgpLCBnKHgpLCBoKHgpXHVhYzAwIFx1YzEyNFx1YmE4NVx1ZDU1YyBcdWQ2MTVcdWMyZGRcdWIzMDBcdWI4NWMmbmJzcDtcdWM4ZmNcdWM1YjRcdWM5YzBcdWJhNzQgZih4KWcoeCkgbW9kdWxvIGgoeClcdWI5N2MgXHVhY2M0XHVjMGIwXHVkNTU4XHViYTc0IFx1YjQxY1x1YjJlNC48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlx1Yzc4NVx1YjgyNVx1Yzc0MCBcdWM1ZWNcdWI3ZWMgXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1Yjg1YyBcdWM3NzRcdWI4ZThcdWM1YjRcdWM4MzggXHVjNzg4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM3ODVcdWI4MjVcdWM3NTggXHVjY2FiIFx1YzkwNFx1YzVkMCBcdWQxNGNcdWMyYTRcdWQyYjhcdWNmMDBcdWM3NzRcdWMyYTRcdWM3NTggXHVjMjE4IFRcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWMwXHViYTcwLCBcdWFjMDEgXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1YjljOFx1YjJlNCBcdWMxMzggXHVjOTA0XHVjNWQwIFx1YWM3OFx1Y2NkMCZuYnNwO1x1YmIzOFx1YzgxY1x1YzVkMFx1YzExYyBcdWMxMjRcdWJhODVcdWQ1NWMgXHVkNjE1XHVjMmRkXHViMzAwXHViODVjIFx1ZDQ1Y1x1YWUzMFx1ZDU1YyBmKHgpLCBnKHgpLCBoKHgpXHVhYzAwIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC48XC9wPlxyXG4iLCJvdXRwdXQiOiI8cD5cdWFjMDEgXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1YjljOFx1YjJlNCBcdWQ1NWMgXHVjOTA0XHVjNWQwJm5ic3A7Zih4KWcoeClcdWI5N2MgaCh4KVx1Yjg1YyBcdWIwOThcdWIyMDggXHViMDk4XHViYTM4XHVjOWMwXHViOTdjJm5ic3A7XHViYjM4XHVjODFjXHVjNWQwXHVjMTFjIFx1YzEyNFx1YmE4NVx1ZDU1YyBcdWQ2MTVcdWMyZGRcdWIzMDBcdWI4NWMgXHVjZDljXHViODI1XHVkNTVjXHViMmU0LjxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjAiLCJwcm9ibGVtX2xhbmdfY29kZSI6Ilx1ZDU1Y1x1YWQ2ZFx1YzViNCJ9LHsicHJvYmxlbV9pZCI6IjczNDUiLCJwcm9ibGVtX2xhbmciOiIxIiwidGl0bGUiOiJNb2R1bGFyIG11bHRpcGxpY2F0aW9uIG9mIHBvbHlub21pYWxzIiwiZGVzY3JpcHRpb24iOiI8cD5Db25zaWRlciBwb2x5bm9taWFscyB3aG9zZSBjb2VmZmljaWVudHMgYXJlIDAgYW5kIDEuIEFkZGl0aW9uIG9mIHR3byBwb2x5bm9taWFscyBpcyBhY2hpZXZlZCBieSAmIzM5O2FkZGluZyYjMzk7IHRoZSBjb2VmZmljaWVudHMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHBvd2VycyBpbiB0aGUgcG9seW5vbWlhbHMuIFRoZSBhZGRpdGlvbiBvZiBjb2VmZmljaWVudHMgaXMgcGVyZm9ybWVkIGJ5IGFkZGl0aW9uIG1vZHVsbyAyLCBpLmUuLCAoMCArIDApIG1vZCAyID0gMCwgKDAgKyAxKSBtb2QgMiA9IDEsICgxICsgMCkgbW9kIDIgPSAxLCBhbmQgKDEgKyAxKSBtb2QgMiA9IDAuIEhlbmNlLCBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhjbHVzaXZlLW9yIG9wZXJhdGlvbi48XC9wPlxyXG5cclxuPHA+KHg8c3VwPjY8XC9zdXA+ICsgeDxzdXA+NDxcL3N1cD4gKyB4PHN1cD4yPFwvc3VwPiArIHggKyAxKSArICh4PHN1cD43PFwvc3VwPiArIHggKyAxKSA9IHg8c3VwPjc8XC9zdXA+ICsgeDxzdXA+NjxcL3N1cD4gKyB4PHN1cD40PFwvc3VwPiArIHg8c3VwPjI8XC9zdXA+PFwvcD5cclxuXHJcbjxwPlN1YnRyYWN0aW9uIG9mIHR3byBwb2x5bm9taWFscyBpcyBkb25lIHNpbWlsYXJseS4gU2luY2Ugc3VidHJhY3Rpb24gb2YgY29lZmZpY2llbnRzIGlzIHBlcmZvcm1lZCBieSBzdWJ0cmFjdGlvbiBtb2R1bG8gMiB3aGljaCBpcyBhbHNvIHRoZSBleGNsdXNpdmUtb3Igb3BlcmF0aW9uLCBzdWJ0cmFjdGlvbiBvZiBwb2x5bm9taWFscyBpcyBpZGVudGljYWwgdG8gYWRkaXRpb24gb2YgcG9seW5vbWlhbHMuPFwvcD5cclxuXHJcbjxwPih4PHN1cD42PFwvc3VwPiArIHg8c3VwPjQ8XC9zdXA+ICsgeDxzdXA+MjxcL3N1cD4gKyB4ICsgMSkgLSAoeDxzdXA+NzxcL3N1cD4gKyB4ICsgMSkgPSB4PHN1cD43PFwvc3VwPiArIHg8c3VwPjY8XC9zdXA+ICsgeDxzdXA+NDxcL3N1cD4gKyB4PHN1cD4yPFwvc3VwPjxcL3A+XHJcblxyXG48cD5NdWx0aXBsaWNhdGlvbiBvZiB0d28gcG9seW5vbWlhbHMgaXMgZG9uZSBpbiB0aGUgdXN1YWwgd2F5IChvZiBjb3Vyc2UsIGFkZGl0aW9uIG9mIGNvZWZmaWNpZW50cyBpcyBwZXJmb3JtZWQgYnkgYWRkaXRpb24gbW9kdWxvIDIpLjxcL3A+XHJcblxyXG48cD4oeDxzdXA+NjxcL3N1cD4gKyB4PHN1cD40PFwvc3VwPiArIHg8c3VwPjI8XC9zdXA+ICsgeCArIDEpICh4PHN1cD43PFwvc3VwPisgeCArIDEpID0geDxzdXA+MTM8XC9zdXA+ICsgeDxzdXA+MTE8XC9zdXA+ICsgeDxzdXA+OTxcL3N1cD4gKyB4PHN1cD44PFwvc3VwPiArIHg8c3VwPjY8XC9zdXA+ICsgeDxzdXA+NTxcL3N1cD4gKyB4PHN1cD40PFwvc3VwPiArIHg8c3VwPjM8XC9zdXA+ICsgMTxcL3A+XHJcblxyXG48cD5NdWx0aXBsaWNhdGlvbiBvZiB0d28gcG9seW5vbWlhbHMgZih4KSBhbmQgZyh4KSBtb2R1bG8gYSBwb2x5bm9taWFsIGgoeCkgaXMgdGhlIHJlbWFpbmRlciBvZiBmKHgpZyh4KSBkaXZpZGVkIGJ5IGgoeCkuPFwvcD5cclxuXHJcbjxwPih4PHN1cD42PFwvc3VwPiArIHg8c3VwPjQ8XC9zdXA+ICsgeDxzdXA+MjxcL3N1cD4gKyB4ICsgMSkgKHg8c3VwPjc8XC9zdXA+ICsgeCArIDEpIG1vZHVsbyAoeDxzdXA+ODxcL3N1cD4gKyB4PHN1cD40PFwvc3VwPiArIHg8c3VwPjM8XC9zdXA+ICsgeCArIDEpID0geDxzdXA+NzxcL3N1cD4gKyB4PHN1cD42PFwvc3VwPiArIDE8XC9wPlxyXG5cclxuPHA+VGhlIGxhcmdlc3QgZXhwb25lbnQgb2YgYSBwb2x5bm9taWFsIGlzIGNhbGxlZCBpdHMgZGVncmVlLiBGb3IgZXhhbXBsZSwgdGhlIGRlZ3JlZSBvZiB4PHN1cD43PFwvc3VwPiArIHg8c3VwPjY8XC9zdXA+ICsgMSBpcyA3LjxcL3A+XHJcblxyXG48cD5HaXZlbiB0aHJlZSBwb2x5bm9taWFscyBmKHgpLCBnKHgpLCBhbmQgaCh4KSwgeW91IGFyZSB0byB3cml0ZSBhIHByb2dyYW0gdGhhdCBjb21wdXRlcyBmKHgpZyh4KSBtb2R1bG8gaCh4KS4gV2UgYXNzdW1lIHRoYXQgdGhlIGRlZ3JlZXMgb2YgYm90aCBmKHgpIGFuZCBnKHgpIGFyZSBsZXNzIHRoYW4gdGhlIGRlZ3JlZSBvZiBoKHgpLiBUaGUgZGVncmVlIG9mIGEgcG9seW5vbWlhbCBpcyBsZXNzIHRoYW4gMTAwMC48XC9wPlxyXG5cclxuPHA+U2luY2UgY29lZmZpY2llbnRzIG9mIGEgcG9seW5vbWlhbCBhcmUgMCBvciAxLCBhIHBvbHlub21pYWwgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGQrMSBhbmQgYSBiaXQgc3RyaW5nIG9mIGxlbmd0aCBkKzEsIHdoZXJlIGQgaXMgdGhlIGRlZ3JlZSBvZiB0aGUgcG9seW5vbWlhbCBhbmQgdGhlIGJpdCBzdHJpbmcgcmVwcmVzZW50cyB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBwb2x5bm9taWFsLiBGb3IgZXhhbXBsZSwgeDxzdXA+NzxcL3N1cD4gKyB4PHN1cD42PFwvc3VwPiArIDEgY2FuIGJlIHJlcHJlc2VudGVkIGJ5PFwvcD5cclxuXHJcbjxwPjggMSAxIDAgMCAwIDAgMCAxLjxcL3A+XHJcbiIsImlucHV0IjoiPHA+VGhlIGlucHV0IGNvbnNpc3RzIG9mIFQgdGVzdCBjYXNlcy4gVGhlIG51bWJlciBvZiB0ZXN0IGNhc2VzIChUKSBpcyBnaXZlbiBpbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgaW5wdXQgZmlsZS4gRWFjaCB0ZXN0IGNhc2UgY29uc2lzdHMgb2YgdGhyZWUgbGluZXMgdGhhdCBjb250YWluIHRocmVlIHBvbHlub21pYWxzIGYoeCksIGcoeCksIGFuZCBoKHgpLCBvbmUgcGVyIGxpbmUuIEVhY2ggcG9seW5vbWlhbCBpcyByZXByZXNlbnRlZCBhcyBkZXNjcmliZWQgYWJvdmUuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+VGhlIG91dHB1dCBzaG91bGQgY29udGFpbiB0aGUgcG9seW5vbWlhbCBmKHgpZyh4KSBtb2R1bG8gaCh4KSwgb25lIHBlciBsaW5lLjxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjEiLCJwcm9ibGVtX2xhbmdfY29kZSI6Ilx1YzYwMVx1YzViNCJ9XQ==