#include <iostream>
#include <vector>
unsigned int n;
std::vector<std::vector<bool>> fraktaali(unsigned int määrä);
void käännä(std::vector<std::vector<bool>> & lista);
int main() {
std::cin >> n;
std::vector<std::vector<bool>> lista = fraktaali(n);
for (auto& l : lista) {
for (bool b : l)
std::cout << (b ? '.' : '#');
std::cout << std::endl;
}
system("pause");
}
std::vector<std::vector<bool>> fraktaali(unsigned int määrä) {
if (määrä == 1)
return std::vector<std::vector<bool>>(1, std::vector<bool>(true));
else {
std::vector<
std::vector<
std::vector<bool>>> fraktaalit;
for (int i = 0; i < 4; ++i)
fraktaalit.emplace_back(fraktaali(määrä-1));
käännä(fraktaalit.at(3));
std::vector<std::vector<bool>> valmis;
unsigned int koko = fraktaalit.at(0).size();
for (int f = 0; f < 4; f+=2) {
for (int rivi = 0; rivi < koko; ++rivi) {
valmis.emplace_back(fraktaalit.at(f).at(rivi));
valmis.back().insert(
valmis.back().end(),
fraktaalit.at(f+1).at(rivi).begin(),
fraktaalit.at(f+1).at(rivi).end());
}
}
return valmis;
}
}
void käännä(std::vector<std::vector<bool>> & lista) {
for (int x = 0; x < lista.size(); ++x)
lista.at(x).flip();
}