#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int s;
string data, res;
LL size;
int getnum(char ch)
{
if ('0' <= ch && ch <= '9')
return ch - '0';
else
return 10 + ch - 'a';
}
void compute(int length, int &i)
{
}
void solve()
{
//先求出原始数据长度
int n = data.size(), pos = 0;
for (int i = 0, cnt = 0; i < n; i += 2)
{
int num = 16 * getnum(data[i]) + getnum(data[i + 1]);
if (num & 128)
{
size += (num - 128) * pow(128, cnt);
cnt++;
}
else
{
size += num * pow(128, cnt);
pos = i + 2;
break;
}
}
//依次计算压缩的格式
for (int i = pos; i < n;)
{
//判断是否字面量
int num = 16 * getnum(data[i]) + getnum(data[i + 1]);
i += 2;
if ((num & 3) == 0)
{
int length = num >> 2;
int cnt = 0;
if (length < 60)
{
length++;//后面包含的字节
res += data.substr(i, i + length * 2);
}
else
{
cnt = length - 60 + 1;
length = 0;
for (int j = i + 2, k = 0; j < i + cnt * 2; j += 2)
{
int number = 16 * getnum(data[i]) + getnum(data[i + 1]);
length += number * pow(256, k);
k++;
}
length++;
res += data.substr(i + cnt * 2, i + cnt * 2 + length * 2);
}
i = i + cnt * 2 + length * 2;
}
else
{
}
}
for (int i = 0; i < res.size(); i ++)
{
cout << res[i];
if ((i + 1) % 16 == 0)
cout << endl;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> s;
int n = (s + 7) / 8;
for (int i = 0; i < n; i++)
{
string a;
cin >> a;
data = data + a;
}
solve();
return 0;
}
只有十分,未来考虑再改