public class Suma {

static int n, m, dlugosc_wyniku;;

static int []liczba1 = new int[1000100];

static int []liczba2 = new int[1000100];

static Vector wynik = new 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 wynik2){

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 tab){

// 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 tab){

// 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 tab){

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)+" ");

}

}

}