public void map(LongWritable lineid, Text nodetxt,
				OutputCollector<Text, Text> output, Reporter reporter)
		throws IOException
		{
			Node node = new Node();
			node.fromNodeMsg(nodetxt.toString());

			output.collect(new Text(node.getNodeId()), new Text(node.toNodeMsg()));
			reporter.incrCounter("Brush", "nodes", 1);
            //\\//
            boolean bubble_msg = false;
            int fdegree = node.degree("f");
			int rdegree = node.degree("r");
            if ((fdegree == 1) && (rdegree == 1)) {
                TailInfo ftail = node.gettail("f");
                TailInfo rtail = node.gettail("r");
                if ( (node.len() - ftail.oval_size - rtail.oval_size) <= MAXBUBBLELEN   ) {
                    bubble_msg = true;
                }
            }
			//\\//
            if (bubble_msg/*node.len() < MAXBUBBLELEN*/)
			{
				if ((fdegree == 1) && (rdegree == 1))
				{
					reporter.incrCounter("Brush", "potentialbubbles", 1);
                    //int fdegree = node.degree("f");
			        //int rdegree = node.degree("r");
					TailInfo ftail = node.gettail("f");
					TailInfo rtail = node.gettail("r");

					String major  = ftail.id;
					String majord = "f" + ftail.dir;
                    int major_oval = ftail.oval_size;

					String minor  = rtail.id;
					String minord = "r" + rtail.dir;
                    int minor_oval = rtail.oval_size;

					//\\// 閮剖�bubble���湔�
                    if (rtail.id.compareTo(ftail.id) > 0)
					{
						String tmpid = major;
						String tmpdir = majord;
                        int tmp_oval = major_oval;

						major = minor;
						majord = minord;
                        major_oval = minor_oval;

						minor = tmpid;
						minord = tmpdir;
                        minor_oval = tmp_oval;
					}

					majord = Node.flip_link(majord);
					minord = Node.flip_link(minord);

					String str = node.str();
                    //System.err.println(rtail.oval_size + " n_len:" + node.len() + " f:" + ftail.oval_size);
                    if (node.len()-ftail.oval_size < rtail.oval_size) {
                        str = "";
                    } else {
                        str = str.substring(rtail.oval_size, node.len()-ftail.oval_size);
                    }
                    str = Node.str2dna(str);
					float cov = node.cov();

					output.collect(new Text(major),
							new Text(Node.BUBBLELINKMSG + "\t" +
									majord + "\t" + node.getNodeId() + "\t" +
									minord + "\t" + minor + "\t" +
									str + "\t" + cov + "\t" + major_oval + "\t" +minor_oval + "\t" + node.len()));

					//print "$major\t$BUBBLELINKMSG\t$majord\t$nodeid\t$minord\t$minor\t$str\t$cov\n";
				}
			}
		}