ll dp[701][701];
ll ways[701];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll sst, type;
cin >> sst >> type;
if (type == 2)cin >> md;
dp[0][0] = 1;
ways[0] = 1;
rep(i, 1, 700) {
rep(j, 1, i) {
dp[i][j] = dp[i - 1][j - 1] + (i - j >= 0 ? dp[i - j][j] : 0);
dp[i][j] %= md;
ways[i] += dp[i][j];
ways[i] %= md;
}
}
vector<vector<ll>>tmp(4, vector<ll>(701, 0));
rep(k, 0, 700)
{
tmp[0][k] = ways[k];
}
rep(len, 1, 3) {
per(k, 0, 700)
{
per(kk, 0, k) {
tmp[len][k] += tmp[len - 1][kk] * ways[k - kk] % md;
tmp[len][k] %= md;
}
}
}
while (sst--) {
g(n);
ll ans = INF;
per(i, 1, n) {
if (i * i < n)break;
ll j = up(n, i);
ans = min(ans, j + i);
}
ll ret = 0;
per(i, 1, n) {
if (i * i < n)break;
ll j = up(n, i);
if (j + i == ans) {
ll t = min(i, j) - 1;
ret += tmp[3][i * j - n] * (i == j ? 1 : 2) % md;
ret %= md;
}
}
if (type == 2)printf("%lld %lld\n", ans * 2, ret);
else {
per(i, 1, n) {
if (i * i < n)break;
ll j = up(n, i);
ll res = n;
if (i + j == ans) {
cout << i << " " << j << "\n";
rep(ii, 1, i) {
rep(jj, 1, j) {
if (res) {
cout << '#';
res--;
}
else cout << '.';
}
cout << '\n';
}
break;
}
}
}
}
}