public class Suma {
static int n, m, dlugosc_wyniku;;
static int []liczba1 = new int[1000100];
static int []liczba2 = new int[1000100];
static Vector
public static void main(String[] args){
StreamTokenizer strTok = new StreamTokenizer(
new BufferedReader(
new InputStreamReader(System.in)));
try{
strTok.nextToken();
n = (int)strTok.nval;
for(int i = 0; i < n; i++){
strTok.nextToken();
liczba1[i] = (int)strTok.nval;
}
strTok.nextToken();
m = (int)strTok.nval;
for(int i = 0; i < m; i++){
strTok.nextToken();
liczba2[i] = (int)strTok.nval;
}
}catch(IOException e){
System.err.println("Input Stream ERROR");
}
dodaj();
normalizuj(wynik);
eliminate_102_002(wynik);
eliminate_front(wynik);
eliminate_last(wynik);
normalizuj(wynik);
wypisz();
}
static int max(int x, int y){
if(x>y){
return x;
}else{
return y;
}
}
static void dodaj(){
wynik.setSize(max(n,m)+10);
for(int i = 0; i < wynik.size(); ++i){
wynik.set(i,0);
}
for(int i = 0; i < n; i++){
wynik.set(i, liczba1[i]);
}
for(int i = 0; i < m; i++){
wynik.set(i, wynik.get(i)+liczba2[i]) ;
}
dlugosc_wyniku = max(n,m);
System.out.println("dodaj");
System.out.print(wynik.size()+" ");
for(int j = 0; j < wynik.size(); ++j){
System.out.print(wynik.get(j)+" ");
}
System.out.println();
}
static void normalizuj(Vector int ile_jedynek = 0;
for(int i = 0; i < max(n,m)+5; ++i){
if(wynik2.get(i) == 0){
if(ile_jedynek == 0){
// 0 -> 0
ile_jedynek = 0;
continue;
}
if(ile_jedynek == 1){
// 010 -> 010
ile_jedynek = 0;
continue;
}
if(ile_jedynek % 2 == 0){
for(int j = 1; j <= ile_jedynek; ++j){
wynik2.set(i - j, 0);
if(j % 2 == 0){
wynik2.set(i-j, 1);
}
}
wynik2.set(i - ile_jedynek, 0);
wynik2.set(i, 1);
ile_jedynek = 1;
continue;
}
// 01^(2k+1) -> 010(01)^k
for(int j = 1; j <= ile_jedynek; ++j){
wynik2.set(i - j, 0);
if(j % 2 == 0){
wynik2.set(i - j, 1);
}
}
wynik2.set(i, 1);
wynik2.set(i - ile_jedynek, 1);
wynik2.set(i - ile_jedynek + 1, 0);
ile_jedynek = 1;
continue;
}
if(wynik2.get(i) == 1){
ile_jedynek++;
}
if(wynik2.get(i) == 2){
if(ile_jedynek == 0){
// nastepna zawsze jest == 0
continue;
}
if(ile_jedynek == 1){
// 0120 -> 0011
wynik2.set(i - 1, 0);
wynik2.set(i, 1);
wynik2.set(i + 1, 1);
ile_jedynek = 1;
}
if(ile_jedynek == 2){
// 01120 -> 01011
wynik2.set(i - 1, 0);
wynik2.set(i, 1);
wynik2.set(i + 1, 1);
ile_jedynek = 1;
}
}
}
System.out.println("normalizacja");
System.out.print(wynik.size()+" ");
for(int i = 0; i < wynik.size(); ++i){
System.out.print(wynik.get(i)+" ");
}
System.out.println();
}
static void eliminate_102_002(Vector // chcemy wyeliminowac sekwencje 102 i 002
// ciag na wejsciu jest znormalizowany.
// i kazda 2 jest "otoczona" zerami
for (int i = max(n,m)+5; i >= 2; --i){
if(tab.get(i) == 2){
if((tab.get(i - 1) == 0) && (tab.get(i - 2) == 1)){
// 102 -> 211
tab.set(i - 2, 2);
tab.set(i - 1, 1);
tab.set(i, 1);
continue;
}
if((tab.get(i - 1) == 0) && (tab.get(i - 2) == 2)){
// 002 -> 111
tab.set(i - 2, 1);
tab.set(i - 1, 1);
tab.set(i, 1);
}
}
}
if((tab.get(1) == 2) && (tab.get(0) == 0)){
tab.set(1, 1);
tab.set(0, 2);
}
System.out.println("eliminate_102_002");
System.out.print(wynik.size()+" ");
for(int i = 0; i < wynik.size(); ++i){
System.out.print(wynik.get(i)+" ");
}
System.out.println();
}
static void eliminate_front(Vector // usuwa 2 z poczatku
if((tab.get(0) == 2) && (tab.get(1) == 0)){
tab.set(0, 0);
tab.set(1, 0);
}
int i = 0;
if(tab.get(i) == 2){
int ile_jedynek = 0;
while(tab.get(i + ile_jedynek + 1) == 1){
ile_jedynek++;
}
if((ile_jedynek != 0) && (ile_jedynek % 2 == 0)){
// 21^(2k)0 -> (01)^(k+1)
for(int j = 0 ; j < ile_jedynek+2; j++){
if(j % 2 == 0){
tab.set(i + j, 0);
}
if(j % 2 == 1){
tab.set(i + j, 1);
}
}
i += ile_jedynek + 1;
}
if(ile_jedynek % 2 == 1){
// 21^(2k+1)0 -> 1(01)^(k+1)
for(int j = 0; j < ile_jedynek+2; j++){
if(j % 2 == 0){
tab.set(i + j , 1);
}
if(j % 2 == 1){
tab.set(i + j, 0);
}
}
i += ile_jedynek + 1;
}
}
// poniewaz w danych nie bylo 002 to w wyniku nie bedzie 102
System.out.println("eliminate_front");
System.out.print(wynik.size()+" ");
for(int j = 0; j < wynik.size(); ++j){
System.out.print(wynik.get(j)+" ");
}
System.out.println();
}
static void eliminate_last(Vector for(int i = 2; i < max(n,m) + 2; i++){
if(tab.get(i) == 2){
// 1102 -> 0012
if((tab.get(i - 1) == 0) && (tab.get(i - 2) == 1) && (tab.get(i - 3) == 2)){
tab.set(i - 3, 0);
tab.set(i - 2, 0);
tab.set(i - 1, 1);
tab.set(i, 2);
continue;
}
}
if(tab.get(i - 1) == 2){
if(tab.get(i) == 0){
// 120 -> 011
tab.set(i - 2, 0);
tab.set(i - 1, 1);
tab.set(i, 1);
continue;
}
if(tab.get(i) == 1){
// 121 --> 012
tab.set(i - 2, 0);
tab.set(i - 1, 1);
tab.set(i, 2);
continue;
}
}
}
System.out.println("eliminate_last");
System.out.print(wynik.size()+" ");
for(int i = 0; i < wynik.size(); ++i){
System.out.print(wynik.get(i)+" ");
}
System.out.println();
}
static void wypisz(){
while((wynik.size() > 1) && (wynik.get(wynik.size()-1) == 0)){
wynik.remove(wynik.size()-1);
}
System.out.print(wynik.size()+" ");
for(int i = 0; i < wynik.size(); ++i){
System.out.print(wynik.get(i)+" ");
}
}
}