For each string s consisting of characters '0' and '1' one can define four integers a00, a01, a10 and a11, where axy is the number of subsequences of length 2 of the string s equal to the sequence {x, y}.

In these problem you are given four integers a00, a01, a10, a11 and have to find any non-empty string s that matches them, or determine that there is no such string. One can prove that if at least one answer exists, there exists an answer of length no more than 1 000 000.

Input

The only line of the input contains four non-negative integers a00, a01, a10 and a11. Each of them doesn't exceed 109.

Output

If there exists a non-empty string that matches four integers from the input, print it in the only line of the output. Otherwise, print "Impossible". The length of your answer must not exceed 1 000 000.

Examples
Input

Copy
1 2 3 4
Output

Copy
Impossible
Input

Copy
1 2 2 1
Output

Copy
0110

首先从a00和a11可以求出0和1的数量;

假设目前为0000...001111..;

显然a01=num0*num1,a10=0;

那么我们移动一个1去左边,a10++,a01--;但总数还是不变;

那么合理的解必须是a10+a01=num0*num1;

值得注意的是:当00或11=0时,0或1可能有1个也可能没有;

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 1000005
#define inf 0x3f3f3f3f
//#define INF 1e18
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9 + 7;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-3
typedef pair<int, int> pii;
#define pi acos(-1.0)
const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;
inline ll rd() {
ll x = 0;
char c = getchar();
bool f = false;
while (!isdigit(c)) {
if (c == '-') f = true;
c = getchar();
}
while (isdigit(c)) {
x = (x << 1) + (x << 3) + (c ^ 48);
c = getchar();
}
return f ? -x : x;
} ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a%b);
}
ll sqr(ll x) { return x * x; } /*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {
if (!b) {
x = 1; y = 0; return a;
}
ans = exgcd(b, a%b, x, y);
ll t = x; x = y; y = t - a / b * y;
return ans;
}
*/
int a00, a01, a10, a11; int main()
{
//ios::sync_with_stdio(0);
rdint(a00); rdint(a01); rdint(a10); rdint(a11);
int k = 1, r = 1;
while (k*(k - 1) / 2 < a00)k++;
while (r*(r - 1) / 2 < a11)r++;
// cout << k << ' ' << r << endl;
int fg = 1;
if (k*(k - 1) / 2 != a00 || r * (r - 1) / 2 != a11) {
cout << "Impossible" << endl; return 0;
} else if (a00 == 0 && a11 == 0) {
if (a01 == 0 && a10 == 0)cout << 0 << endl;
else if (a01 == 0 && a10 == 1)cout << "10" << endl;
else if (a01 == 1 && a10 == 0)cout << "01" << endl;
else cout << "Impossible" << endl;
return 0;
}
else if (a00 == 0) {
if (a01 == 0 && a10 == 0) {
while (r--)cout << '1'; }
else if (a01 + a10 == r) {
while (a10--)cout << '1';
cout << 0;
while (a01--)cout << '1';
}
else fg = 0;
}
else if (a11 == 0) {
if (a10 == 0 && a01 == 0) {
while (k--)cout << '0';
}
else if (a10 + a01 == k) {
while (a01--)cout << 0;
cout << 1;
while (a10--)cout << 0;
}
else fg = 0;
} else {
if (a01 + a10 == k * r) {
while (a01) {
while (r > a01) {
cout << 1;
r--;
}
cout << 0;
k--; a01 -= r;
}
while (r--)cout << 1;
while (k--)cout << 0;
}
else fg = 0;
}
if (fg == 0)cout << "Impossible" << endl;
return 0;
}

CF708B Recover the String 构造的更多相关文章

  1. codeforces 709D D. Recover the String(构造)

    题目链接: D. Recover the String time limit per test 1 second memory limit per test 256 megabytes input s ...

  2. AIM Tech Round 3 (Div. 1) B. Recover the String 构造

    B. Recover the String 题目连接: http://www.codeforces.com/contest/708/problem/B Description For each str ...

  3. cf708B. Recover the String---(构造法)

    题目链接:http://codeforces.com/problemset/problem/708/B 意思是给出四个参数 a00表01串中00对的数量 a01表01串中01对的数量 a10表01串中 ...

  4. 【CodeForces】708 B. Recover the String 数学构造

    [题目]B. Recover the String [题意]找到一个串s,满足其中子序列{0,0}{0,1}{1,0}{1,1}的数量分别满足给定的数a1~a4,或判断不存在.数字<=10^9, ...

  5. Recover the String

    Recover the String 题目链接:http://codeforces.com/contest/709/problem/D 构造 这题乍一看很难构造,但是如果知道了整个字符串中'0'和'1 ...

  6. AIM Tech Round 3 (Div. 2)D. Recover the String(贪心+字符串)

    D. Recover the String time limit per test 1 second memory limit per test 256 megabytes input standar ...

  7. B. Recover the String

    B. Recover the String time limit per test 1 second memory limit per test 256 megabytes input standar ...

  8. java的String构造对象的几种方法以及内存运行过程

    String类创建对象的方法可以分为以下三种 1.String a = "123"; 2.String b = new String("123"); 3.Str ...

  9. C++ string 构造的陷阱

    先看代码 #include<iostream> #include<string> using namespace std; int main(int argc, char ** ...

随机推荐

  1. CDM中遍历域及其约束条件、取值范围、引用它的项目

    Option   ExplicitValidationMode   =   TrueInteractiveMode =   im_BatchDim   mdl   '当前model'获取当前活动mod ...

  2. Oracle Sql中输入特殊字符 转义字符

    1.单引号,出现在单引号对中的'号必须成对出现,每对代表一个', 例如select '''' from dual; 结果:' 前后两个'代表正常字符串,中间两个''代表一个',此语句输出结果只有一个'

  3. 第七章 Java中的13个原子操作类

    当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i = 1:A线程更新i + 1,B线程也更新i + 1,经过两个线程操作之后可能i不等于3,而是等于2,.因为A和B线 ...

  4. 问题:oracle if;结果:Oracle IF语句的使用

    oracle 之if..else用法 oracle条件分支用法 a.if...then b.if...then... else c.if...then... elsif.... else 实例 1 问 ...

  5. nginx 添加win 服务

    https://jingyan.baidu.com/article/0964eca279aa818285f536a9.html

  6. spring中的class配置不能使用properties中的字符串

    1.比如在a.properties中我们声明了一个变量: classRoom=com.wc82.ClassRoom 2.然后在spring的配置文件中:applicationContext.xml,有 ...

  7. android-auto-scroll-view-pager (无限广告轮播图)

    github 地址: https://github.com/Trinea/android-auto-scroll-view-pager Gradle: compile ('cn.trinea.andr ...

  8. Lucene源码解析--Analyzer之Tokenizer

    Analyzer包含两个核心组件,Tokenizer以及TokenFilter.两者的区别在于,前者在字符级别处理流,而后者则在词语级别处理流.Tokenizer是Analyzer的第一步,其构造函数 ...

  9. 推荐两款富文本编辑器:NicEdit和Kindeditor

    做过Web开发的朋友相信都使用过富文本编辑器,比较出名的CuteEditor和CKEditor很多人应该已经使用过,在功能强大的同时需要加载的东西也变得很多.下面要推荐的两款富文本编辑器都是使用JS编 ...

  10. 算法Sedgewick第四版-第1章基础-015一stack只保留last指针

    /************************************************************************* * * A generic queue, impl ...