Problem:
Score : 200 points

Problem Statement

Kurohashi has never participated in AtCoder Beginner Contest (ABC).

The next ABC to be held is ABC N (the N-th ABC ever held).
Kurohashi wants to make his debut in some ABC x such that all the digits of x in base ten are the same.

What is the earliest ABC where Kurohashi can make his debut?

Constraints

100 \leq N \leq 999

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

If the earliest ABC where Kurohashi can make his debut is ABC n, print n.

Sample Input 1

111

Sample Output 1

111

The next ABC to be held is ABC 111, where Kurohashi can make his debut.

Sample Input 2

112

Sample Output 2

222

The next ABC to be held is ABC 112, which means Kurohashi can no longer participate in ABC 111.
Among the ABCs where Kurohashi can make his debut, the earliest one is ABC 222.

Sample Input 3

750

Sample Output 3

777

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <functional>
#include <map>
#include <set>
#include <sys/timeb.h>
#include <fstream>
#include <random>
#include <regex>
#include <chrono>
#include <bitset>
#include <cassert>
#include <iomanip>
#include <limits>
#include <stack>

using namespace std;

#define DEBUG_

#define repr(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
#define rep(i, n) repr(i, 0, n)
#define reprrev(i, a, b) for (int i = (int)(b)-1; i >= (int)(a); i--)
#define reprev(i, n) reprrev(i, 0, n)
#define repi(itr, ds) for (auto itr = ds.begin(); itr != ds.end(); itr++)
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()
#define mp make_pair
#define mt make_tuple
#define INF 1050000000
#define INFR INT_MAX
#define INFL (long long)(4e18)
#define INFLR LLONG_MAX
#define EPS (1e-10)
#define MOD 1000000007
//#define MOD 998244353
#define PI 3.141592653589793238
#define RMAX 4294967295

#ifdef DEBUG_
#define DEB
#else
#define DEB if (false)
#endif

#ifdef DEBUG_
#define dump(...)                                                                                \
	DUMPOUT << "  ";                                                                             \
	dump_func(string(#__VA_ARGS__) + ":", "[" + to_string(__LINE__) + ":" + __FUNCTION__ + "]"); \
	DUMPOUT << "    ";                                                                           \
	dump_func(__VA_ARGS__)
#else
#define dump(...)
#endif

typedef long long ll;
typedef pair<int, int> Pi;
typedef pair<ll, ll> Pll;
typedef pair<double, double> Pd;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<bool> vb;
typedef vector<char> vc;
typedef vector<string> vs;
typedef vector<double> vd;
typedef vector<Pi> vPi;
typedef vector<Pll> vPll;
typedef vector<Pd> vPd;
typedef vector<vector<int>> vvi;
typedef vector<vector<bool>> vvb;
typedef vector<vector<ll>> vvll;
typedef vector<vector<char>> vvc;
typedef vector<vector<string>> vvs;
typedef vector<vector<double>> vvd;
typedef vector<vector<Pi>> vvPi;
typedef vector<vector<vector<int>>> vvvi;
typedef vector<vector<vector<ll>>> vvvll;
typedef vector<vector<vector<Pi>>> vvvPi;
typedef vector<vector<vector<vector<Pi>>>> vvvvPi;
typedef priority_queue<int, vector<int>, greater<int>> pqli;
typedef priority_queue<ll, vector<ll>, greater<ll>> pqlll;
typedef priority_queue<Pi, vector<Pi>, greater<Pi>> pqlP;
template <class T>
using vec = vector<T>;
template <class T>
using pql = priority_queue<T, vector<T>, greater<T>>;
string debug_show(Pi a)
{
	return "(" + to_string(a.first) + "," + to_string(a.second) + ")";
}

#define DUMPOUT cerr

void dump_func()
{
	DUMPOUT << endl;
}
template <class Head, class... Tail>
void dump_func(Head &&head, Tail &&... tail)
{
	DUMPOUT << head;
	if (sizeof...(Tail) <= 1)
	{
		DUMPOUT << " ";
	}
	else
	{
		DUMPOUT << ", ";
	}
	dump_func(std::move(tail)...);
}

// vector
template <typename T>
istream &operator>>(istream &is, vector<T> &vec)
{
	for (T &x : vec)
		is >> x;
	return is;
}
// pair
template <typename T, typename U>
ostream &operator<<(ostream &os, pair<T, U> &pair_var)
{
	os << "(" << pair_var.first << "," << pair_var.second << ")";
	return os;
}
// pair
template <typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &pair_var)
{
	os << "(" << pair_var.first << "," << pair_var.second << ")";
	return os;
}
// vector
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &vec)
{
	os << "{";
	for (int i = 0; i < vec.size(); i++)
	{
		os << vec[i] << (i + 1 == vec.size() ? "" : ", ");
	}
	os << "}";
	return os;
}
// map
template <typename T, typename U>
ostream &operator<<(ostream &os, map<T, U> &map_var)
{
	os << "{";
	repi(itr, map_var)
	{
		os << "(" << itr->first << "," << itr->second << ")";
		itr++;
		if (itr == map_var.end())
			os << ", ";
		itr--;
	}
	os << "}";
	return os;
}
// set
template <typename T>
ostream &operator<<(ostream &os, set<T> &set_var)
{
	os << "{";
	repi(itr, set_var)
	{
		os << "  " << *itr << endl;
		itr++;
		if (itr == set_var.end())
			os << ", ";
		itr--;
	}
	os << "}";
	return os;
}
string YN(bool y, int id = 0)
{
	if (id)
		cout << id;
	return (y ? "YES" : "NO");
}
string yn(bool y, int id = 0)
{
	if (id)
		cout << id;
	return (y ? "Yes" : "No");
}
string ON(bool y, int id = 0)
{
	if (id)
		cout << id;
	return (y ? "OK" : "NG");
}

int dir4[4][2] = {{0, -1}, {-1, 0}, {1, 0}, {0, 1}};
int dir8[8][2] = {{-1, -1}, {0, -1}, {1, -1}, {-1, 0}, {1, 0}, {-1, 1}, {0, 1}, {1, 1}};
char dirchar[4] = {'<', '^', '>', 'v'};

// [a,b)
int irand(int a, int b)
{
	static mt19937 Rand(static_cast<unsigned int>(time(nullptr)));
	uniform_int_distribution<int> dist(a, b - 1);
	return dist(Rand);
}

// [a,b)
double drand(int a, int b)
{
	static mt19937 Rand(static_cast<unsigned int>(time(nullptr)));
	uniform_real_distribution<double> dist(a, b);
	return dist(Rand);
}

template <typename T>
T max(vector<T> a)
{
	return *max_element(all(a));
}
template <typename T>
T min(vector<T> a)
{
	return *min_element(all(a));
}
template <typename T>
T sum(vector<T> a)
{
	return accumulate(all(a), 0);
}

template <typename T>
void add(map<T, int> &m, T item)
{
	if (m.find(item) == m.end())
	{
		m[item] = 1;
	}
	else
	{
		m[item]++;
	}
}

template <typename T, typename U>
U get(map<T, U> m, T key, U def)
{
	if (m.find(key) == m.end())
	{
		return def;
	}
	else
	{
		return m[key];
	}
}

template <typename T>
bool contains(set<T> t, const T &key)
{
	return t.find(key) != t.end();
}

struct Edge
{
	int from, to, cost;
	bool operator<(Edge e)
	{
		return cost < e.cost;
	}
};
using Graph = vec<vec<Edge>>;

ostream &operator<<(ostream &os, Edge &edge)
{
	os << "(" << edge.from << "->" << edge.to << ":" << edge.cost << ")";
	return os;
}

//======================================================

int main(void)
{
	int n;
	cin >> n;
	cout << ((n + 110) / 111) * 111 << endl;

	return 0;
}