//
// main.cpp
// test
//
// Created by Jacky Roth on 2019/2/22.
// Copyright © 2019 Jacky Roth. All rights reserved.
//
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn=1010;
double pol[maxn];
struct node {
int n;
double val;
node(int _n,double _val):n(_n),val(_val){};
};
vector<node>res;
int main(int argc, const char * argv[]) {
int k1,k2,n;
double val;
scanf("%d",&k1);
for (int i=0; i<k1; i++) {
scanf("%d%lf",&n,&val);
pol[n]+=val;
}
scanf("%d",&k2);
for (int i=0; i<k2; i++) {
scanf("%d%lf",&n,&val);
pol[n]+=val;
}
for (int i=maxn-1; i>=0; i--) {
if (pol[i]!=0) {
res.push_back(node(i, pol[i]));
}
}
printf("%lu",res.size());
for (int i=0; i<res.size(); i++) {
printf(" %d %.1f",res[i].n,res[i].val);
}
return 0;
}