#include <iostream>
#include <vector>
using namespace std;
#define PB push_back
typedef vector<int> big;
istream& operator >> (istream& stream, big& a) {
string s;
stream >> s;
for (int i=s.size()-1; i>=0; i--) a.PB(s[i]-'0');
return stream;
}
ostream& operator << (ostream& stream, big a) {
for (int i=a.size()-1; i>=0; i--) stream << a[i];
return stream;
}
bool operator > (big a, big b) {
if (a.size() > b.size()) return true;
if (a.size() < b.size()) return false;
for (int i=a.size()-1; i>=0; i--) {
if (a[i] > b[i]) return true;
if (a[i] < b[i]) return false;
}
return false;
}
big operator + (big a, big b) {
big c; int i, r=0;
for (i=0; i<a.size() or i<b.size(); i++) {
if (i < a.size()) r+=a[i];
if (i < b.size()) r+=b[i];
c.PB(r%10);
r/=10;
}
if (r) c.PB(r);
return c;
}
big operator - (big a, big b) {
big c; int i, r=0;
for (i=0; i<a.size(); i++) {
r+=a[i];
if (i < b.size()) r-=b[i];
if (r<0) {
c.PB(r+10);
r=-1;
}
else {
c.PB(r%10);
r=0;
}
}
while (c.size() > 1 and c.back() == 0) c.pop_back();
return c;
}
big operator * (big a, int b) {
big c;
if (b) {
long long r=0;
for (auto e:a) {
r+=e*b;
c.PB(r%10);
r/=10;
}
while(r) {
c.PB(r%10);
r/=10;
}
}
else c.PB(0);
return c;
}
int operator % (big a, int b) {
long long r=0;
for (int i=a.size()-1; i>=0; i--) {
r = r*10 + a[i];
r%=b;
}
return r;
}
big operator / (big a, int b) {
big c; long long r=0;
for (int i=a.size()-1; i>=0; i--) {
r=r*10+a[i];
c.insert(c.begin(), r/b);
r%=b;
}
while(c.size()>1 and c.back()==0) c.pop_back();
return c;
}
int main() {
int n; cin >> n;
big x(1,1);
while (n) {
n--;
x=x*2;
}
cout << x;
return 0;
}