#include using namespace std; // 棋盘覆盖问题原理 // https://blog.csdn.net/m0_51005809/article/details/120112637 const int N = 1e5 + 10; int a[N], al; void mul(int a[], int &al, int b) { int t = 0; for (int i = 1; i <= al; i++) { t += a[i] * b; a[i] = t % 10; t /= 10; } while (t) { a[++al] = t % 10; t /= 10; } while (al > 1 && !a[al]) al--; } int r; void div(int a[], int &al, int b, int &r) { r = 0; for (int i = al; i >= 1; i--) { r = r * 10 + a[i]; a[i] = r / b; r %= b; } while (al > 1 && !a[al]) al--; } int main() { int k; cin >> k; //通过高精度计算4^k a[1] = 1, al = 1; for (int i = 1; i <= k; i++) mul(a, al, 4); div(a, al, 3, r); for (int i = al; i; i--) printf("%d", a[i]); return 0; }